Reverse channel next cancellation for MDSL modem pool

ABSTRACT

A central office xDSL modem pool has N logical xDSL modems. Each modem consists of a transmitter part and a receiver part and is connected to a twisted pair subscriber loop. A central office clock synchronizes the modem transmitters. A reverse channel near-end crosstalk (NEXT) canceller bank is implemented within the modem pool. The NEXT canceller bank has N NEXT cancellers corresponding to the N MDSL modems. Each canceller has N adaptive filters of size M. Outputs of all N adaptive filters are combined to form the NEXT cancellation signal for the corresponding modem. Each adaptive filter is adapted according to the error signal between the received signal and the NEXT cancellation signal and the corresponding transmit signal as the correlation vector.

This appln. is a c-i-p of 08/645,020 filed May 9, 1996.

FIELD OF THE INVENTION

The present invention is related to multimode digital modems, and moreparticularly, to systems employing, methods for and hardware formultimode digital modems.

BACKGROUND OF THE INVENTION

A conventional voice-band modem can connect computer users end-to-endthrough the Public Switched Telephone Network (PSTN). However, thetransmission throughput of a voice-band modem is limited to below about40 Kbps due to the 3.5 KHz bandwidth enforced by bandpass filters andcodes at the PSTN interface points. On the other hand the twisted-pairtelephone subscriber loop of a computer user has a much wider usablebandwidth. Depending on the length of the subscriber loop, the bandwidthat a loss of 50 dB can be as wide as 1 MHz. Transmission systems basedon the local subscriber loops are generally called Digital SubscriberLines (DSL).

As consumer demand for interactive electronic access to entertainment(e.g. video-on-demand) and information (Internet) in digital format hasincreased, this demand has effectively exceeded the capabilities ofconventional voice-band modems. In response, various delivery approacheshave been proposed, such as optical fiber links to every home, directsatellite transmission, and wideband coaxial cable. However, theseapproaches are often too costly, and cheaper alternatives have emerged,such as the cable modem which uses existing coaxial cable connections tohomes and various high bit rate digital subscriber line (DSL) modemswhich use the existing twisted-pair of copper wires connecting a home tothe telephone company central office (CO).

Several digital subscriber lines (DSL) technologies have been developedfor different applications. The original 2B1Q Digital Subscriber Linetechnology has been used as the ISDN Basic Rate Access channelU-interface. The High-bit-rate digital subscriber lines (HDSL)technology has been used as the repeaterless T1 service.

An example of prior art use of DSL techniques is the AsymmetricalDigital Subscriber Line (ADSL) signaling for the telephone loop that hasbeen defined by standards bodies as a communication system specificationthat provides a low-rate data stream from the residence to the CO(upstream), and a high-rate data stream from the CO to the residence(downstream). The ADSL standard provides for operation without affectingconventional voice telephone communications, eg. plain old telephoneservice (POTS). The ADSL upstream channel only provides simple controlfunctions or low-rate data transfers. The high-rate downstream channelprovides a much higher throughput. This asymmetrical information flow isdesirable for applications such as video-on-demand (VOD).

ADSL modems are typically installed in pairs, with one of the modemsinstalled in a home and the other in the telephone company's centraloffice servicing that home. The pair of ADSL modems are connected to theopposite ends of the same twisted-pair and each modem can onlycommunicate with the modem at the other end of the twisted-pair; thecentral office will have a direct connection from its ADSL modem to theservice provided (e.g., movies, Internet, etc.). FIG. 2a heuristicallyillustrates an ADSL modem (FIG. 2a uses "DSL" rather than "ADSL" for themodem) installed in the central office and one in the consumer's home,either a personal computer or a TV set-top box. Because an ADSL modemoperates at frequencies higher than the voice-band frequencies, an ADSLmodem may operate simultaneously with a voice-band modem or a telephoneconversation.

A typical ADSL-based system includes a server located at the CO capableof providing movies or other data-intensive content, and a set-top-boxat the residence that can receive and reassemble the data as well assend control information back to the CO. Meaningful display or use ofthe downstream content typically requires a sustained data rate throughthe modem. Due to the sustained data rate requirements, ADSL systems areprimarily designed to function under certain operating conditions andonly at certain rates. If a subscriber line meets the qualityrequirements, the ADSL modem can function, otherwise new line equipmentmust be installed, or line quality must be improved.

In particular, the ANSI standard ADSL calls for transmission of up to 6million bits-per-second (Mbps) to a home (downstream) over existingtwisted-pair and also for receipt of up to 640 thousand bits per second(Kbps) from the home (upstream).

An ADSL modem differs in several respects from the voice-band modemscurrently being used for digital communication over the telephonesystem. A voice-band modem in a home essentially converts digital bitsto modulated tones in the voice-band (30 Hz to 3.3 KHz), and thus thesignals can be transmitted as though they were just ordinary speechsignals generated in a telephone set. The voice-band modem in thereceiving home then recovers the digital bits from the received signal.The current ITU V-series voice-band modem standards (e.g. V.32 and V.34)call for transmission at bit rates of up to 33.6 Kbps; even these ratesare far too slow for real-time video and too slow for Internet graphics.In contrast, an ADSL modem operates in a frequency range that is higherthan the voice-band; this permits higher data rates. However, thetwisted-pair subscriber line has distortion and losses which increasewith frequency and line length; thus the ADSL standard data rate isdetermined by a maximum achievable rate for a length of subscriberlines, e.g. 9,000 feet (9 kft) for 26 gauge lines, or 12 kft for 24gauge lines.

Voice-band modem data speeds are limited by at least the followingfactors: 1) the sampling rate of the line cards in the central office isonly 8 KHz; 2) the low bit resolution of the A/D and D/A converters usedon the line cards reduces dynamic range; and 3) the length of thesubscriber line (twisted-pair) and any associated electricalimpairments. Although an ADSL modem avoids the first two factors, italso suffers from subscriber line length limitations and electricalimpairments. FIG. 4c illustrates how the capacity of a subscriber linedecreases with increasing line length for the two existing wire sizes. Asimilar capacity decrease with length applies to any type oftwisted-pair subscriber line modem.

FIG. 4a shows in block format a simple ADSL modem whose transmithardware 30 includes the bit encoder 36, inverse fast Fourier transform38, P/S 40, digital-to-analog converter 42, filter and line driver 44for transmission and transformer 46. The receive portion 32 includes atransformer and filter 48, analog-to-digital converter 50, an equalizerfor line distortion compensation 52, S/P 54, fast Fourier transform 56,and bit decoder 58. An echo cancellation circuit from the transmissionportion to the reception portion may be included to suppress signalleakage. The ADSL standard uses discrete multitone (DMT) with the DMTspectrum divided into 256 4-KHz carrier bands and a quadrature amplitudemodulation (QAM) type of constellation is used to load a variable numberof bits onto each carrier band independently of the other carrier bands.

The number of bits per carrier is determined during a training periodwhen a test signal is transmitted through the subscriber line to thereceiving modem. Based on the measured signal-to-noise ratio of thereceived signal, the receiving modem determines the optimal bitallocation, placing more bits on the more robust carrier bands, andreturns that information back to the transmitting modem.

The modulation of the coded bits is performed very efficiently by usinga 512-point inverse fast Fourier transform to convert the frequencydomain coded bits into a time domain signal which is put on thetwisted-pair by a D/A converter using a sample rate of 2.048 Mhz(4×512). The receiving ADSL modem samples the signal and recovers thecoded bits with a fast Fourier transform.

Discrete multi-tone (DMT) has been chosen as the line code for the ADSLstandard. A typical DMT system utilizes a transmitter inverse FFT and areceiver forward FFT. Ideally, the channel frequency distortion can becorrected by a frequency domain equalizer following the receiver FFT.However, the delay spread of the channel in the beginning of thereceiver FFT block contains inter-symbol interference from the previousblock. As this interference is independent of the current block of data,it can not be canceled just by the frequency domain equalizer. Thetypical solution adds a block of prefix data in front of the FFT datablock on the transmitter side before the block of FFT data is sent tothe D/A. The prefix data is the repeat copy of the last section of FFTdata block.

On the receiver side, the received signal is windowed to eliminate thecyclic prefix data. If the length of the channel impulse response isshorter than the prefix length, inter-symbol interference from theprevious FFT data block is completely eliminated. Frequency domainequalizer techniques are then applied to remove intra-symbol interfaceamong DMT subchannels. However, since the channel impulse responsevaries on a case by case basis, there is no guarantee that the length ofthe impulse response is shorter than the prefix length. An adaptive timedomain equalizer is typically required to shorten the length of thechannel response within the prefix length.

Time domain equalizer training procedures have been studied previously,Equalizer Training Algorithms for Multicarrier Modulation Systems, J. S.Chow, J. M. Cioffi, and J. A. C. Bingham, 1993 International Conferenceon Communications, pages 761-765, Geneva, (May 1993) and thecorresponding training sequence has been specified in ADSL standard andRecommended Training Sequence for Time-domain Equalizers (TQE) with DMT,J. S. Chow, J. M. Cioffi, and J. A. C. Bingham, ANSI T1E1.4 CommitteeContribution number 93-086.

The following patents are related to DMT modems: U.S. Pat. No. 5,400,322relates to bit allocation in the multicarrier channels; U.S. Pat. No.5,479,447 relates to bandwidth optimization; U.S. Pat. No. 5,317,596relates to echo cancellation; and U.S. Pat. No. 5,285,474 relates toequalizers.

Alternative DSL modem proposals use line codes other than DMT, such asQAM, PAM, and carrierless AM/PM (CAP). Indeed, ISDN uses a 2bit-1quaternary (2B1Q) four level symbol amplitude modulation of acarrier of 160 KHz or higher to provide more data channels.

CAP line codes typically use in-phase and quadrature multilevel signalswhich are filtered by orthogonal passband filters and then converted toanalog for transmission. FIG. 4b shows a block diagram for thetransmitter 321 and receiver 325 of a DSL modem using the CAP line codeand including both an equalizer 750 and echo cancellation 327.

The following patents are related to CAP modems: U.S. Pat. No. 4,944,492relates to multidimensional passband transmission; U.S. Pat. No.4,682,358 relates to echo cancellation; and U.S. Pat. No. 5,052,000relates to equalizers.

Modems using CAP or DMT, or other line codes, essentially have threehardware sections: (i) an analog front end to convert the analog signalson the subscriber line into digital signals and convert digital signalsfor transmission on the subscriber line into analog signals, (ii)digital signal processing circuitry to convert the digital signals intoan information bitstream and optionally provide error correction, echocancellation, and line equalization, and (iii) a host interface betweenthe information bitstream and its source/destination.

However, these DSL modems have problems including: 1) higher bit ratesfor video that cause them to be complicated and expensive; 2) their bitrates are optimized for a fixed distance, making them inefficient forshort subscriber loops and unusable for long subscriber loops; and 3)either DMT or CAP operates better for given different conditions (e.g.noise, etc.) that may or may not be present in a particular subscriberloop to which the DSL modem is connected.

However, these and other shortcomings of the prior art are overcome bythe present invention.

SUMMARY OF THE INVENTION

The present invention provides a new high speed modem for use onstandard telephone twisted-pair lines at lengths of up to 21,000 ft.This new modem will be referred to as MDSL, mid-band digital subscriberline. The MDSL modem of the present invention makes use of frequencydivision multiplexing (FDM) to separate the downstream and upstreamtransmitted signals. Although the modulation scheme for MDSL can bearbitrary, two specific modulation schemes that may be employed areQAM/CAP and Discrete Multitone (DMT). A startup procedure for achievingsynchronization between the MDSL modem of the present invention at thecentral office (CO) and the MDSL modem at the remote user (RU) end isprovided as part of the present invention.

One of the specific modulation schemes chosen for one implementation ofMDSL is Carrierless AM/PM (CAP). CAP does not make use of a separatetone for synchronization. Synchronization is achieved using thetransmitted data signal directly. At startup, a special data sequence isused to train equalizers in the CAP receiver before real data istransmitted.

The present invention provides a modem which supports both voice-bandand above voice-band (DSL) functionality using preselected commoncircuitry. Preferred embodiments use a DSP to run either voice-band orabove-voiced-band modem software in combination with, either separate orcombined analog front ends, and a common host interface (either serialor parallel). The same internal components may be employed for eitherthe voice-band or the above-voice-band modem, and the modem may have anintegral splitter to separate the voice-band for use by a telephone set.

The present invention provides a programmable Digital Signal Processor(DSP) implementation approach that allows different existing ADSL linecodes, Discrete MultiTone (DMT) and Carrierless AM/PM (CAP), to beimplemented on the same hardware platform as a voice-band modem. With aDSP implementation, the desired transmission rate can also be negotiatedin real time to accommodate line condition and service-costrequirements.

This line code and rate negotiation process can be implemented at thebeginning of each communication session through the exchange of tonesbetween modems at both ends. A four-step Mid-band Digital SubscriberLines (MDSL) modem initialization process is used for line code and ratecompatibility.

Although Digital Subscriber Line (DSL) signaling is used to conveydigital data over existing twisted-pair copper telephone linesconnecting the telephone company central office (CO) to residentialsubscribers, conventional DSL data modems are designed to provideservice to a certain percentage of residential customers at a prescribeddata rate. A new rate negotiation method of the present inventionenables a variable-rate DSL (VRDSL) system. Using the rate negotiationmethod, the variable rate system adapts its throughput based on lineconditions, computational capabilities, network accessibility, andapplication requirements. This service can be added to a telephonesubscriber loop without disrupting the plain old telephone service(POTS). Hence, a voice-band modem connection can also be made availableindependent of the DSL connection.

The rate negotiation method provides systematic control for a DSL systemthat supports multiple rates. The data rates can be varied depending onmodem cost, line conditions, or application requirements. The modemfunctions as a variable rate data link capable of supporting manydifferent applications, including VOD, videophone, multiple ISDN links,and new network access applications. By considering the capability of aparticular DSL connection, available computational power, and anyspecial application program requirements, the data rate can be adaptedby the negotiation method to a suitable level. This scheme providessymmetrical or asymmetrical data links and supports simultaneousapplications requiring arbitrary mixes of symmetrical and asymmetricallinks. A part of the symmetrical portion of the DSL transmissionthroughput can be used for telephone calls or video telephone calls. Apart of the asymmetrical portion of the DSL transmission throughput canbe used for internet access or VOD services. The rate negotiation methodsupports many different network applications using DSL.

The typical implementations of DSL modems, thus far, have supported onlyconnectionless services between the subscriber and the network. However,since DSL is terminated at the local central office, a telephone-networkfriendly DSL interface is desirable. To facilitate multiple virtualservice connections, an operations/signaling channel, similar to theISDN D channel, is preferred for exchanging service and controlmessages. A preprocessor in the CO-end DSL modem is also necessary tocollect operational messages before passing signaling and data packetsto the CO control-channel server.

The DSL modem of the present invention supports connectionless as wellas connection-oriented (switched) services.

The method of rate negotiation is preferably employed with a DSL systemcapable of a varying rate. An example is a variable-rate DSL (VRDSL)system that can provide a variable upstream transmission throughput upto 400 Kbps and a downstream transmission throughput of from 400 Kbps upto 2.048 Mbps. (However, the invention is not constrained to vary withinthe rates given by this example system.) With lower throughput,operation with poor line conditions is supported. Lower data rates alsoallow the design of less expensive modems for less demandingapplications. This is consistent with the mid-band DSL (MDSL) designphilosophy of the present invention, which can provide a symmetrical 400Kbps link using the same hardware platform as a voice-band modem. Withhigh downstream throughput, VRDSL can be made compatible with ADSL.Basically, the VRDSL rate negotiation method provides the capability toserve a range of price/performance DSL modems that can maximizethroughput based on individual line conditions and processing power. InVRDSL signaling, the POTS will still be available through the sametelephone subscriber loop.

The host interface requirements for the Mid-band digital subscriber line(MDSL) software system is also a part of the present invention.

The software running under the host PC platform to control the MDSLnetwork interface card was implemented as an NDIS 3.0 WAN mini-portdriver; it works under Windows NT/Windows 95 together with existingnetworking drivers and applications.

The line connection management process for a mid-band digital subscriberlines (MDSL) provides a simple, efficient and flexible interface tomanage the line connection between MDSL-C (MDSL in Central Office site)and MDSL-R (MDSL in residential site). MDSL uses four different linemodes: leased line with single link (LLSL); leased line with multiplelinks (LLML); switched line with soft dial (SLSD); and switched linewith hard dial (SLHD). The host interface for the LLSL mode, has threedifferent line states: line drop, line disconnected and line connected.An internal state machine of the MDSL modem can record and monitor theline status and notify the state change to the other MDSL modem, as wellas the host processor. The protocol used for exchanging line connectionmanagement messages of the present invention is a simplifiedpoint-to-point link control protocol.

The MDSL host interface includes the following basic functions:command/control communications between the host and MDSL, lineconnection management and send/receive data packet. The MDSL hostinterface provides a simple, user-friendly, efficient and low-costinterface to the host controller.

In a presently preferred embodiment, the host driver software for MDSLis implemented as an NDIS WAN miniport driver running under Windows95/NT environment. The software controls and manages the Media AccessControl (MAC) sublayer of the MDSL network system and working with NDISwrapper and an upper layer protocol driver stack, any internet accessingapplication can be run transparently.

The present invention also provides a simple algorithm to train the timedomain equalizer of an MDSL modem. By the same procedure, the FFT frameboundary is also reliably detected.

BRIEF DESCRIPTION OF THE DRAWINGS

The Figures are schematic for clarity.

FIGS. 1a-e show a preferred embodiment multimode modem.

FIGS. 2a-c show preferred embodiment modem Central Office modems;

FIGS. 3a-e show preferred embodiment modem applications and ISDNsignaling;

FIGS. 4a-c show prior art modems plus subscriber line capacity;

FIGS. 5a-b show another preferred embodiment modem;

FIGS. 6a-f illustrate preferred embodiment initialization;

FIGS. 7a-f show preferred embodiment rate negotiation;

FIGS. 8a-c show preferred embodiment synchronization;

FIGS. 9a-d show preferred embodiment training;

FIGS. 10a-h show preferred embodiment line connection management;

FIGS. 11a-n show preferred embodiment modem driver;

FIG. 12 shows preferred embodiment downloading;

FIGS. 13a-g show preferred embodiment sampling rate conversion; and

FIGS. 14a-e show preferred embodiment modem pool.

DETAILED DESCRIPTION

Overview of preferred embodiment modems

FIG. 1a shows a functional block diagram of a first preferred embodimentof a multimode modem 100 of the present invention. In FIG. 1a, modem 100includes both a voice-band and DSL band data path to a single subscriberline (twisted-pair) 140, which connects to a telephone company centraloffice. A voice-band analog front end (VB AFE) 110 transmits andreceives at frequencies in the voice-band (30 Hz to 3.3 Khz), whereasthe digital subscriber line analog front end (DSL AFE) 120 transmits andreceives at frequencies above the voice-band (above 4 KHz). A Splitter130 connects to the subscriber line 140 and separates the incomingsignals into its voice-band and above-voice-band components. POTS (plainold telephone service) occurs in the voice-band and a telephone may beconnected to the subscriber line directly or through the splitter 130.

Modem 100 utilizes a single programmable digital signal processor (DSP)150 as part of the DSL band data path and as part of the voice-band datapath, but typically uses two separate data input ports. Generally, theDSL band will have a much higher bit rate than the voice-band data path,so using separate DSP ports will be more convenient than using a singleport with a buffered multiplexer; although the use of such a multiplexeris an alternative clearly within the scope of the present invention. Forexample, the DSL band operation modem 100 may employ an upstream (fromresidence to central office) frequency band centered at 100 KHz with atotal bandwidth of slightly less than 200 KHz, and a downstream (fromcentral office to residence) frequency band centered at 300 KHz and alsoof total bandwidth slightly less than 200 KHz; this frequency allocationprovides for full duplex operation of modem 100. Generally multipleDSPs, instead of a single DSP, may be employed to increase functionsperformed or to increase performance. The DSP 150 is connected to a hostinterface circuit 160.

Modem 100 can select from multiple line codes and, further, modem 100can perform as either a high-bit-rate DSL modem in frequencies abovevoice-band or as a voice-band modem (such as V.34), eithersimultaneously or consecutively, just by switching programs beingexecuted by the DSP 150. The various line code programs can be stored inthe DSP onboard memory or in auxiliary memory not shown in FIG. 1a.Also, alternative line codes for the DSL modem operations (e.g., a CAPor a DMT line code) can be used, again depending upon the programexecuted by the DSP 150.

FIGS. 1b-c illustrates the DSL data path portion of modem 100 whichincludes analog-to-digital 172 and digital-to-analog 170 converters,filters 174, 176, a transmission driver 178, and a receiver amplifier180. FIG. 1b additionally explicitly shows a phase locked loop 182 clockgenerator that synchronizes the modems' internal clocks with the clocksignals from the host (or the central office). FIG. 1c omits thebandpass filters and instead shows various optional memory types, bothSRAM 184 and nonvolatile EEPROM 186 which could hold line code programs.When modem 100 acts as a voice-band modem, the splitter 130 provides thevoice-band frequencies to the voice-band analog front end 120.

FIG. 1d illustrates the DSP software for modem 100 in DSL mode andincludes (i) an optional kernel (operating system) 190 for the DSP, (ii)host interface 192, (iii) optional management maintenance control 194,(iv) framing 196, (v) embedded operations control 198, (vi) channelmultiplexer 199 for multiplexing the embedded operations control withthe data stream, (vii) scrambler logic 191 for bitstream scrambling(viii) the transceiver logic 193 such as a CAP or DMT logic whichincludes the bits-to-symbols conversions, equalization, echocancellation, and (ix) modulator/demodulator 195 logic and optionalforward error correction (FEC).

FIG. 1e illustrates the software protocol hierarchy for applicationsrunning on modem 100 interfacing with a host. The physical layer 185(layer 1) includes the DSP software for modulation, bitstreamscrambling, and multiplexing control signals with the data stream. Thedata link layer 187 (layer 2) in the DSP includes embedded operationscontrol and framing. The network layer 189 (layer 3) in the hostincludes the modem driver (e.g. NDIS type for a Windows 95/NT) andtransport protocols such as PPP (point-to-point protocol). Applicationssuch as Internet browsers interact with the transport protocols.

For voice-band modes of operation, modem 100 may use software similar tostandard voice-band modems (e.g. V.34, etc.).

The present invention provides a new high speed modem 100 for use onstandard telephone twisted-pair lines at lengths up to 21,000 ft. Thisnew modem 100 will be referred to as MDSL, mid-band digital subscriberline. The MDSL modem 100 makes use of frequency division multiplexing(FDM) to separate the downstream and upstream transmitted signals.Although the modulation scheme for MDSL can be arbitrary, two specificmodulation schemes that may be employed are QAM/CAP and DiscreteMultitone (DMT). A startup procedure for achieving synchronizationbetween the modem at the central office (CO) and the modem at the remoteuser (RU) end is provided as part of the invention.

One of the modulation schemes selected for one embodiment of the MDSLmodem is Carrierless AM/PM (CAP). CAP can be considered as a specialcase of the more conventional Quadrature Amplitude Modulation (QAM). Themain difference is that CAP performs most of its processing in thepassband, while QAM performs most of its processing at baseband.

CAP does not make use of a separate tone for synchronization.Synchronization is achieved using the transmitted data signal directly.At startup, a special data sequence is used to train equalizers in theCAP receiver before real data is transmitted.

One embodiment uses Carrierless AM/PM (CAP) Modulation and DiscreteMultiple-Tone Modulation on the same DSP platform to achieve 16 Kbps-384Kbps upstream speed (from MDSL-R to MDSL-C) and 384 Kbps-2.048 Mbpsdownstream speed (from MDSL-C to MDSL-R). The MDSL-C can also beinstalled as a gateway or router to allow the MDSL-R access to localarea networks. Examples of the application of MDSL are described laterherein.

Prototype MDSL hardware was built upon an ISA card which can be pluggedinto a PC or other platform directly. This prototype contains thefollowing components: TMS320C541 DSP to implementmodulation/demodulation; network physical layer framing and interfacingwith the HOST, 16-bit wide EEPROM and RAM; Combined D/A and A/DConverter capable of supporting the sampling rates, resolution, andother characteristics necessary for implementation of MDSL; AnalogFront-End circuitry required for connection to a POTS interface; and anISA bus interface circuit.

FIG. 2a shows modem 100 in a home 210 communicating with another modem100 in the central office 220. This central office 220 modem 100 mayhave various capabilities and loads, and the subscriber loop 140 may bein a particular condition, so the modems execute an initializationprocess to select the line code (CAP, DMT or others), the bit-rate, andtrain the equalizers. Then the modems begin data communication.

FIGS. 2b-c illustrate alternative central office connections tosubscriber lines with DSL modems: each subscriber line has a DSL AFE(analog front end) and a digital switch connects an AFE output to a DSLprocessor, either a DSP similar to the DSP in the residence modem or asingle DSP for multiple AFEs. The central office monitors the AFEoutputs and a digital switch assigns an available DSP to communicatewith the corresponding residence DSL modem. The central office polls theAFEs to find active modems in the residences. As FIGS. 2b-c show, thecentral office DSL modem connects to a remote access server on a localarea network with packetized information (e.g., Internet) or a wide areanetwork with constant bit rate data which is sent directly across thepublic switched telephone network trunk lines. The information sent bythe residence modem would be identified or signaled via an out of bandsignaling method (e.g. similar to ISDN Q.931 signaling), rather than anoff-hook signal, plus telephone number sent in the voice-band to theanalog switching and line cards. FIG. 2c illustrates the majorfunctional blocks of a central office DSL modem (the DSL band is alreadyseparated from the voice-band) as an AFE 240, DSP 260, CommunicationsController 280 and ARM or RISC processor 290. The modem has a connectionto both the constant bit rate transmissions (voice, video conferencing,etc.) being forwarded to a time division multiplexed (TDM) bus andpacketized data (Internet, Intranet, private networks, etc.) beingforwarded to a control bus (and then to the trunk lines). FIG. 2cdepicts the terminology "xDSL" which may be ADSL or any other type ofDSL modem. These various functions could be all performed in a singleDSP 260.

The AFEs 240 could be separated from the central office 220 and placedin the pedestals connected to the central office via optical fiber orcoaxial cable; each pedestal would tap off a bundle of subscriber lineswith residences within a short distance, such as 5 kft or less. In thismanner, the attenuation at high frequencies for long subscriber linescan be avoided.

An alternative is for the central office to monitor each subscriber linewith a DSL modem in the above-voice-band frequencies and when the linebecomes active, an analog switch connects the subscriber line to a DSLmodem in the central office. This mimics FIG. 2b except a simplermonitoring and an analog switch replace AFE monitoring and a digitalswitch. The same approach may also be used in conjunction with the localpedestal to shorten the subscriber line distance from residence DSLmodem to the AFE on the central office end (physically located in theremote pedestal).

FIG. 3a shows a system with modem 100 in a personal computer 310 runningWindows 95 (or Windows NT) with standard protocol stacks communicatingover a subscriber line 140 with a corresponding modem 100 in the centraloffice 220, which may be connected to an Internet access server via anEthernet (10/100 Base T) interface. Modem 100 allows for both POTS orvoice-band modem communication with another voice-band modem at the sametime as the DSL portion of modem 100 connects to the Internet over theDSL portion.

Similarly, FIG. 3b shows a DSL modem acting as a router 330 for a localarea network (LAN) 320 and coupling to devices 340, 342, 344 withcorresponding DSL modems.

FIG. 3c shows half of a teleconferencing system based on modem 100 in aPC 350. Each teleconferencing end has modem 100 communicating at 384+16Kbps with a modem in a central office 220. The central office modemtransmits data between a concentrator and packetizer 360, and thepacketizer converts to the 16 Kbps signaling channel into ISDN likesignaling messages and applies the 384 Kbps stream to the T1/T3 serviceacross the public switched telephone network. The central office 220 forthe receiving party inverts these operations to feed the receiving modem100. Traffic in the opposite directions proceeds similarly. Note thatPOTS can simultaneously be used with modems 100 for the voice in theteleconferencing. An analog delay can be inserted in the POTS output tosynchronize with the video.

FIGS. 3d and 3e show ISDN-type signaling protocols and messages; modem100 sends voice or data over the public switched telephone network. TheSS7 network provides the backbone for carrying the ISDN user's part(ISUP) messages for call set-up and tear-down through the network.

FIG. 5a shows multimode modem 500, which includes the modem 100 featuresof both a DSL AFE 110 and a VB AFE 120, with a splitter 130 forsubscriber line 140 connection together an ISDN front end 510 forconnection to an ISDN line 142 plus an audio front end 520 for driving aspeaker 146 and receiving a microphone 144 output as could be used forsupporting a hands-free speakerphone. External RAM 530 may benonvolatile (EEPROM or Flash EPROM) and/or volatile (SRAM or DRAM). Theexternal RAM 530 may contain various programs for different line codesthat may be used by the DSP 150. Such line codes may be DMT, QAM, CAP,RSK, FM, AM, PAM, DWMT, etc.

The transmit part of modem 100 consists of in-phase and quadraturepassband digital shaping filters implemented as a portion of QAMtransceiver logic; and the receive part consists of a fractionallyspaced complex decision feedback equalizer (DFE) with in-phase andquadrature feedforward filters and cross-coupled feedback filtersimplemented as a portion of QAM transceiver logic. Optionally, the QAMtransceiver logic may include a Viterbi decoder.

When modem 500 is active, modem 500 may provide voice-band modemfunctionality, DSL band modem functionality, ISDN functionality, audiofunctionality, other line code functionality, etc., or any combinationsof the foregoing.

The present invention also includes a system where multiple like anddifferent modems are simultaneously implemented in a single DSP hardwaredevice. For example, voice-band (e.g., V.34), DSL, cable, terrestrialand other wireless, and/or satellite modems are implementedsimultaneously by the same DSP device. This is now becoming possiblewith increased processing capabilities of DSP devices. The advantages ofthis approach are to reduce overall system cost where the systemrequires multiple modems (e.g., Remote Access Systems (RAS): processingrequirements are reduced due to reductions in processing overhead andprogram and data memory are reduced by sharing program and data memorybuffers. For example, program memory is reduced when multiple likemodems are executed simultaneously by a single DSP device. Interface andother miscellaneous glue logic are reduced by sharing the same logicbetween multiple modems, as well as better facilitating for statisticalmultiplexing and rate control.

In the near-term, the following situations will predominate, but thesecombinations will expand as DSP MIPS capabilities increase as a naturalprogression in the semiconductor industry: multiple voice-band modems insame DSP; voice-band and DSL modems in same DSP; voice-band and cablemodems in same DSP; multiple DSL modems in same DSP; multiple cablemodems in the same DSP; and/or any combination of the above.

FIG. 5b shows a passive splitter circuit for separation of voice-bandand higher frequency DSL band. The splitter also performs impedancematching and ensures an acceptable return loss value for POTS.

Referring now to FIG. 6a, there may be seen a schematic diagram of theinterconnection of a telephone 212 and modem 500 to a central office220, via a subscriber loop 140.

Systems based on the DSL technology and available today are ISDN BasicRate Access Channel and Repeaterless T1. DSL systems under developmentare Asymmetrical Digital Subscriber Lines (ADSL), Symmetrical DigitalSubscriber Lines (SDSL), and Very-high-bit-rate Digital Subscriber Lines(VDSL). The transmission throughput of a DSL system is dependent on theloop loss, the noise environment, and the transceiver technology.

The noise environment can be a combination of self or foreign Near EndCrosstalk (NEXT), Far End Crosstalk (FEXT), and background white noise.

FIG. 6b depicts multiple subscriber loops 140 and, schematically howNEXT and FEXT are generated.

The transmission throughput of DSL for ISDN Basic Rate Access Channel is160 Kbps. The transmission throughput of HDSL for repeaterless T1 is 800Kbps. The transmission throughputs of ADSL are between 16 Kbps to 640Kbps in the upstream (from a subscriber to a telephone central office)and between 1.544 Mbps to 6.7 Mbps in the downstream. The transmissionthroughputs of MDSL are presently believed to be 384 Kbps in theupstream and between 384 Kbps to 2.048 Mbps in the downstream.

A passband DSL system can be implemented with a single carrier usingQuadrature Amplitude Modulation (QAM) or Carrierless AM/PM (CAP) linecodes. A single carrier system depends on the adaptive channel equalizerto compensate for the channel distortion. The channel equalizer usuallyoperates at a multiple of the signaling baud rate. FIG. 6c depicts ablock diagram of a CAP transceiver.

More particularly, D/A 614 is connected to transmitter fitters 610, 612and to filter 616. Filter 616 is connected to channel 620. Channel 620is connected to filter 630 which is connected to A/D 632. A/D 632 isconnected to equalizers 634, 636. A portion of the circuitry 638recovers the time.

A DSL system can also be implemented with multiple carriers using theDiscrete MultiTone (DMT) line code. A DMT system divides the channelinto many subchannel carriers to better exploit the channel capacity andto reduce the channel distortion in addition to allowing for arelatively simple adaptive channel equalizer which only compresses thetime spread of the channel impulse response rather than correcting it. Asimple frequency domain equalizer completes the channel equalization.The signaling band rate of the DMT subchannels is much lower than theband rate of a single carrier system.

FIG. 6d depicts a block diagram of a DMT transceiver. More particularly,IFFT block 640 is connected to D/A 644, which is connected to transmitfilter 646 which is connected to channel 650. Channel 650 is connectedto filter 660 which is connected to A/D 632 which is connected toequalizer 664, which is connected to FFT block 666. Startup 642 and timerecovery 668 circuitry is also included.

One MDSL modem embodiment uses frequency division full duplex for lowerhardware cost and lower crosstalk noise level. Such an MDSL modem willprovide a minimum of 384 Kbps full duplex transmission link between acentral office and a subscriber for a loop length of up to 21 kft. Underfavorable subscriber loop conditions, this MDSL modem can provide a muchhigher transmission throughput which is limited by channel capacity orthe hardware capabilities of the subscriber-end modem. A full featureversion of a subscriber-end MDSL modem communicates with ADSL modems atthe central office end. The transmitter and receiver parts of the MDSLmodem are capable of implementing either CAP or DMT line codes.

FIG. 6e depicts a block diagram of an MDSL modem 600. Modem 600 has atransmitter 676 connected to a D/A 674 which is connected to a filter672 which is connected to hybrid circuit 670 which is connected tosplitter 130. Hybrid circuit is also connected to filter 678 which isconnected to A/D 680. A/D 680 is connected to receiver 682 which outputsthe received signal. Timing recovery block 684 is used to recover thecentral office clock timing.

The purpose of the initialization process is to confirm the MDSLcapability of the telephone subscriber loop 140 at both the centraloffice 220 and the subscriber-end 210. The initialization process probesthe channel 620, and produces information useful for transceivertraining. The process then selects the line code, assuming multiplechoices are available, and negotiates the transmission throughput basedon the channel limit, traffic condition, or usage tariff.

The initialization process which is described later herein is: channelprobing, line code selection, rate negotiation, and transceivertraining.

An MDSL modem at the subscriber-end sends probing tones in the upstreamband for a certain duration, with or without phase alternation for apart of these tones, according to a predefined time sequence. After thefirst time duration, the MDSL modem at the central office end respondswith channel probing tones in the downstream band, again, with orwithout phase alternation for a part of these tones. This initialchannel probing period may be repeated, if desired or necessary.

After the initial channel probing period, the MDSL modem at thesubscriber-end has determined the line code capability of the centraloffice end modem and has a channel model for the downstream band and,similarly, the MDSL modem at the central office end has determined theline code capability of the subscriber-end modem and has a channel modelfor the upstream band.

After the channel probing period, the MDSL modem at the subscriber-endshould indicate/confirm its line code capability/preference by sendingsignature tones for a predefined time duration. Similarly, the MDSLmodem at the central office end should respond/confirm the line codeselection by sending signature tones for a predefined time duration.This signature tone exchange process is preferably repeated for alimited number of times to determine a particular line code choice.

Another set of signature tones is then exchanged between MDSL modems atboth ends for the transmission rate negotiation. The MDSL modem at thesubscriber-end sends its rate capabilities and its preference. The MDSLmodem at the central office end responds with its capabilities and itsrate selection. MDSL modems determine a rate choice with a predefinedrate change procedure described later herein. The transmission ratepreference at the subscriber-end depends on the line condition, hardwarecapability, and user choice or application requirements. Thetransmission rate preference at the central office end depends on theline condition and the traffic load. Preferably, rate change during acommunication session due to line condition change or user choice isallowed.

After the rate negotiation, the MDSL modems at both ends starttransceiver training according to the conventional methods. Differenttime domain training sequences may be used for different line codes. Itis an option to use the channel models obtained during the channelprobing step to speed up the transceiver training process.

The spectra of upstream and downstream probing tones are depicted inFIG. 6f. The upstream CAP tones 690 and downstream CAP tones 692 aredepicted on the left side, while the upstream DMT 694 and downstream DMT696 are depicted on the right. The "broken" lines in the DMT spectrarepresent phase shifts.

For simplicity, all frequency tones are assumed to be equally spacedwith frequencies iΔf, amplitude a_(i), and phase Φ_(i) (usually it iseither 0 or π). At the receiver, the amplitude and phase of the receivedtones may be detected. The detected amplitude and phase of i-thfrequency tone are b_(i), and φ_(i) respectively. Assuming that thereare N probing tones, the frequency response of the equivalent channelincluding filters at frequency iΔf is ##EQU1##

The impulse response of the equivalent channel can be calculated by afast Fourier transform as ##EQU2## where T is the sampling period. Thefrequency spacing Δf depends on the spread of the channel impulseresponse. For a channel impulse response spread of n sampling periods,

    Δf≦B/n=NΔf/n                            (C)

where B is the total bandwidth of interest.

To distinguish from two different line codes, the phase of adjacenttones may be reversed by 180° for one of the line codes. This line codecould be DMT. To identify different line codes after channel distortion,select ##EQU3##

For a channel spread of 30 samples and a bandwidth of 100 Khz, selectΔf≈1.7 KHz and N as 64.

The channel probing tones should at least last more than a few times ofthe channel spread. With possible phase alternation, the channel probingtone duration should be 4 to 10 times of that necessary for the channelmodel recovery.

Using N tones, we can represent M=2^(N) different messages in a unittime period with constant tones. Because the available vocabulary growsexponentially with the number of tones used, the useful messages may besent with a small set of tones, e.g. only two, three, or four differentfrequencies.

The following is a list of example messages.

384 Kbps/CAP

768 Kbps/CAP

1.544 Mbps/CAP

2.048 Mbps/CAP

384 Kbps/DMT

768 Kbps/DMT

1.544 Mbps/DMT

2.048 Mbps/DMT

Prefer Highest Rate

Prefer Best Price

Packet Multiplexing Allowed

Only Low Rate Available

Tones can be generated by an IFFT operation as used for the DMT linecode. A unit magnitude and zero/180° phase vector signal is fed into theIFFT operation for the channel probing purpose. Selected zero phasevectors are used for the generation of signature tones.

Tones can be recovered by an FFT operation also as used for the DMT linecode. The amplitude and phase information of each tone is recovered as acomplex vector. A common phase difference due to the random samplingphase is calculated. Compensation produces a complex vector which isthen used for calculating the channel transmission throughput and thechannel impulse response, which might be used for transceiver training.

If the MDSL service is available through the telephone loop, the MDSLmodem at the central office end should be on and monitor the upstreamfrequency band for probing tones.

Once power is on or a user service request is made, the MDSL modem atthe subscriber-end sends upstream probing tones for a predefined timeperiod and then monitors downstream probing tones. The MDSL modem at thecentral office end detects the probing tones, compensates for the randomphase, stores them, and calculates the upstream channel transmissionthroughput. Meanwhile, the central office end MDSL modem sends theprobing tones in the downstream frequency band.

The MDSL modem at the subscriber-end detects the probing tones,compensates for the random phase, stores them, and calculates thedownstream channel transmission throughput. The subscriber-end MDSLmodem then sends signature tones in the upstream band to indicate linecode and transmission rate preferences.

The MDSL modem at the central office end detects the signature tones andresponds with signature tones corresponding to its preferred offering.The subscriber-end MDSL modem then sends signature tones to confirm theoffering or to request offering modification. The MDSL modems go into atransceiver training period after the confirmation of modem offering.

The throughput capacity of the DSL communication channel will changewith line conditions and/or network accessibility. Line conditionsdictate the achievable throughput of the physical connection between theCO and the residence. Network accessibility describes the capability ofthe service provider's connection lining the DSL channel to the backbonenetwork. The invented rate negotiation method incorporates a detailedunderstanding of the capacity-limiting factors of a DSL system.

DSL systems are traditionally engineered for the worst-case linecondition for which service is to be provided. This approach simplifiesthe general installation procedure for telephone companies. However,restricting the DSL transmission throughput to that achieved in theworst-case line condition leaves most DSL systems operating well belowtheir potential. The invented method provides a systematic procedure formaximizing the physical transmission throughput of each local loop,enabling most DSL modems to operate at much higher rates thantraditionally engineered. In fact, this method enables a majority of DSLmodems to achieve a transmission throughputs which are only limited bythe capabilities of the modem hardware. The rate negotiation method alsoprovides time-varying adaptation in order to maintain the highestpossible throughput as line conditions or network accessibility changes.

The physical throughput of the twisted-pair DSL channel is limited bythe receiver's ability to reliably distinguish the transmitted signal inthe presence of noise and interference. The maximum possible throughputis upper bounded by the theoretical channel capacity of the physicallink, such as depicted in FIG. 4c. The channel capacity of the link isdetermined by the bandwidth used, the received signal characteristics,and the noise and interference. The rate negotiation method willincrease the DSL reach by providing low-rate options that can besupported by extremely long telephone subscriber loops while providinghigh-rate options that allow DSL modems operating on shorter loops toachieve a higher throughput.

The rate negotiation method considers the dynamic nature of the DSLtransmission medium. The DSL is a time varying channel whose capacitymay change due to improving/degrading channel conditions. As the channelconditions change, the theoretical maximum throughput also changes. Thetime-varying nature of the channel characteristics dictates the need forrate negotiation techniques to achieve the most efficient use of thechannel over time. This provides the capability for maintaining a DSLconnection during periods of difficult channel characteristics bylowering the throughput. This also enables the modem to increase thethroughput and make the best use of the connection during periods offavorable channel characteristics. Ideally, the transceivers at each endcan monitor the channel and maximize their throughput as conditionsvary. A practical transmitter/receiver can be designed that increases ordecreases throughput of the physical channel based on the availablecapacity, the available signal processing resources, and therequirements of the specific applications. Several rate adaptationmethods exist (e.g. the standard CCITT V.34 Voiceband Modem Standard),but two particularly convenient techniques are discussed later hereinfor two distinctly different modulation methods. However, the techniquesfor rate adaptation are easily extended to other modulation and codingschemes, and such extensions are considered part of the presentinvention.

Network accessibility in this context describes the rate and/or delayassociated with the transfer of data from the local loop to the backbonenetwork. This measure might be affected by the specific backbone networkused (e.g. Internet, ATM, etc.), the bandwidth given by the serviceprovider, and the amount of network traffic. The techniques defined inthis invention are not restricted to use on a particular backbonenetwork.

Although a VRDSL connection is capable of certain transmissionthroughput, the total throughput might not be connected to correspondingCO backbone networks at times. For VRDSL-provided services going throughthe PSTN (Public Switched Telephone Network), connections will be madeonly when services are initiated. For VRDSL-provided services terminatedat the local CO, such as internet access, leased line or dial-up lineconnections with certain throughputs can be made depending on thepreferred cost structure. The available CO backbone throughput to eachVRDSL modem can be different at different times. The subscriber-desiredthroughput could also vary for different applications .

With actual throughputs lower than that provided by the VRDSL physicaltransmission link, traffic concentration can be realized at CO backbonenetworks. Statistical multiplexing can also be realized by using aseparate analog front end for each CO VRDSL modem. The required numberof corresponding digital portions can be less than the number of analogfront-ends, depending on the traffic behavior. In the extreme case, thedigital portion of the CO VRDSL modem can be multiplexed among activeVRDSL links by using the voice-band as a traffic indicating channel andkeeping a copy of the digital state portion of the modem inside RAM.

The VRDSL communications model is depicted in FIG. 7a. The sole purposeof this model is to aid in understanding the disclosed rate-negotiationtechnique. The model is composed of separate residence 7210 and centraloffice 7220 layered representations of functional separation. Thefunctionality of the residence terminal 7210 is shown on the left. Thelowest layer 7330 is the Communication Hardware Layer, which containsthe modulator/demodulator, signal conditioning, timing, synchronization,and error-correction coding. This layer can also be referred to as thedata pump layer. The second layer 7320 is the Hardware Control Layer.This layer provides framing control and other data packaging functionsthat better organize the data received by the lower layer. The thirdlayer 7310 is the Software Driver Layer. This layer provides aninterface between the hardware levels and the application programs runat the residence. The fourth (top) layer 7300 is the ApplicationSoftware Layer, which contains all functions provided by the applicationprograms run at the residence. This layer encompasses both the softwareto manage the throughput allocated to different simultaneousapplications as well as the application programs themselves.Conventional software application programs request a channel and acceptthe available throughput provided by the lower layers (no negotiation).Future generations of software application programs might have therequirement and capability for rate negotiation.

The CO 7220 portion of the model also contains four layers. The bottomthree layers 7430, 7420, 7410 are very similar to the residence side ofthe model. (However, the actual implementation can be radicallydifferent.) The fourth (top) layer 7400 in the CO is called the NetworkAccess Software Layer. This layer provides the functions required forinterfacing the DSL connection to the backbone network.

In the rate negotiation method, each layer of the model communicates andinteracts with the layer below and above. A standard protocol forcommunication between layers is defined. As shown in FIG. 7a, a layercan indicate R (Rate request) to a lower layer in order to initiate arate negotiation; "R" is depicted in FIG. 7a along with a correspondingdownward arrow. The lower layer can indicate A (Available Rate Notify)to the upper layer to inform the upper layer of the achievable rates;"A" is depicted in FIG. 7a along with a corresponding upward arrow. Themeaning of the R and A information is different for the different layerinterfaces, however, the process of negotiating is similar.

A rate table is defined as a common syntax for the R and A signalingbetween layers. The rate table defines the rates that a particular layercan attempt to achieve. (In general, this will be defined by thehardware limitations of the modem.) During a rate request (R), an upperlayer might signal a lower layer of a desire to change the ratestructure. If the lower layer is able to reconfigure itself to a new setof operating parameters and achieve the requested rate, then it will doso and indicate this to the upper layer. If the lower layer determinesthe requested rate to be unacceptable, the upper layer is informed alongwith information about the rates that are available under the presentoperating conditions (A).

A lower layer can also initiate rate negotiation if the operatingconditions change due to lower or higher achievable throughputs. Theupper layer is informed of the new set of achievable rates (A). Theupper layer can then respond with a rate request based on the newconditions (R).

This common layer interface simplifies the rate negotiation method.Although the parameters of the rate table are different at each layerinterface, the interaction methods are similar.

Each layer can conceptually view the communication link as being betweenit and the corresponding layer at the other end of the DSL connection.As shown by the lines connecting the corresponding layers in theresidence and central office:

1. The Communication Hardware Layers 7330,7430 in the residence and COare connected by a non-virtual `Raw` connection. This is the physicalconnection over which the actual modulation occurs.

2. The Hardware Control Layers 7320, 7420 can view the communicationlink as a virtual `Corrected` data stream. This is the actual throughputof the channel after the physical timing, synchronization, control, anderror-correction coding redundancy symbols have been removed.

3. The Software Driver Layer 7310, 7410 views the connection as avirtual channel called the data link channel (DLC). For convenience, theDLC may be a frame structure that represents multiple N kbit/secchannels (N=16 or 64 e.g.). In addition, a control channel may bespecified. This control channel may either be embedded in the lowerlayer channels or can be completely separated from the DSL connection.For example, the control signaling might be implemented in thevoice-band via a v.34 modem connection.

4. The Application Software Layer 7300 sees a virtual `Application Link`7500 to some data providing location of interest in the CO or thebackbone network.

The basic requirement for rate adaptation is the rate table, awell-defined set of achievable rates that can be communicated to theupper layers of the DSL communication model. The rate-table isdetermined by the capabilities of the hardware at both ends of theconnection. During startup or reset, a pair of modems must agree uponthe rate table entries which they are both capable of supporting. Theallowed rates under a given channel condition are then represented aslegal states in the table. The different levels of the model cancommunicate via the rate-table syntax without concern for detail inother layers. This rate table can vary substantially from one modulationand/or coding scheme to the next, but the concept of allowed anddisallowed rates depending on channel conditions does not change.

The following describes how rate negotiation between the HardwareControl Layer 7320,7240 and the Communication Hardware Layer 7330,7430is performed in accordance with the teachings of the present invention.Modulation parameters are allowed to vary to accommodate various rates,and the layers interact using the rate. The following describes twopossible modulation based rate adaptation techniques and examples ofrate tables that can be shared between the bottom two layers in the DSLcommunication model.

In the case of high-rate serial transmission of digital data, digitalsymbols are chosen to represent a certain number of bits, say N. Groupsof N bits are mapped into symbols which are transmitted over thechannel. At the decoder, a decision is made to determine the transmittedsymbols. If the correct decision is made, the transmitted bits aredecoded correctly.

A method of changing the throughput changes the number of bitsrepresented by each symbol while keeping the symbol rate constant.Increasing the number of bits represented in each symbol increases thenumber of transmitted bits, albeit at lower noise immunity. Decreasingthe number of bits per symbol increases the noise immunity and improvesthe robustness of the transmission, but at the expense of a lowerthroughput. The bandwidth remains the same in either case.

Another straightforward method of varying the throughput is changing thebandwidth used in the transmission channel. By expanding the bandwidth,a greater number of symbols can be transmitted over the channel in agiven interval. The symbol rate is roughly proportional to thebandwidth. However, the processing requirements of the DSL modem alsoincrease with the bandwidth; higher bandwidth requires greatercomputation for modulation/demodulation. The maximum usable bandwidthmight either be restricted by channel conditions or modem hardwareprocessing capability constraints.

First, a set of parameters describing the communication link and the setof values which the parameters may assume is defined.

Let the nominal serial transmission rate be R. Define the minimum ratestep by which a DSL modem can change as dR. If the minimum rate isR-2*dR and the maximum rate is R+2*dR, then the set of achievable ratesis given by {R-2*dR,R-dR, R, R+dR,R+2*dR}. For example, let R=300kilo-symbols/second, and dR=100 kilo-symbols per second. The set ofachievable rates become {100, 200, 300, 400, 500} kilo-symbols/second.

Let N represent the number of bits conveyed by each transmitted digitalsymbol. For example, a VRDSL modem might support operation with N in theset {2,3,4,5}. The higher values of N will convey more bits in a givenperiod, but will also result in lower tolerance to noise.

Using the R and N rate parameters and assuming they are allowed toindependently assume the values above, a rate table can be defined asfollows:

                  TABLE 1                                                         ______________________________________                                        Serial transmission (e.g. CAP) rate table example.                            R = 1e5      R = 2e5  R = 3e5  R = 4e5                                                                              R = 5e5                                 ______________________________________                                        N = 2  200 kbits/s                                                                             400       600    800   1000                                  N = 3  300       600       900   1200   1500                                  N = 4  400       800      1200   1600   2000                                  N = 5  500       1000     1500   2000   2500                                  ______________________________________                                    

The rates R in Table 1 are given in units of symbols/second and areillustrated in scientific notation in the table for brevity. The tableentries show the achievable transmission throughputs in kilobits/secondfor a given rate R and N bits represented by each symbol.

Discrete multi-tone (DMT) modulation transmits low-rate data symbolsover parallel subchannels. By splitting a high-rate serial data streaminto multiple low-rate data streams that are transmitted in separatesubchannels, the system can be tailored to better match a frequencyselective channel. Good portions of the overall bandwidth (thosesubbands with high signal-to-noise ratio (SNR)) are used to transmitsymbols with a larger number of bits/symbol. An unequal number of bitsare assigned to different subchannels, depending on the availablecapacity of each subchannel. Essentially, the data can be distributedamong subchannels in a manner allowing very efficient use of the overallbandwidth.

As with the high-rate serial data stream, the overall bandwidth of a DMTsystem can be increased or decreased according to the overall desiredthroughput, channel conditions, and modem hardware capabilities.Additionally, DMT modulation provides the capability of dropping oradding bandwidth a single subchannel at a time. For a DMT system with alarge number of subchannels, this creates a very large selection ofpossible bandwidths. If desired, the number of subchannels can be variedwhile keeping the overall bandwidth fixed.

For simplicity, consider a DMT system where the subchannel bandwidthremains constant, but the overall channel bandwidth used is controlledby the number of subchannels used. Let T represent the number ofsubchannels or tones used in transmission. Let N represent the averagenumber of bits/symbol across the subchannels. N is no longer restrictedto be an integer as with the high-rate serial transmission system. Forthis example, however, consider N to be approximately an integer valued.The following is an example of a rate table for DMT:

                  TABLE 2                                                         ______________________________________                                        DMT transmission rate table example.                                          T = 32       T = 64   T = 96   T = 128                                                                              T = 160                                 ______________________________________                                        N = 2  200 kbits/s                                                                             400       600    800   1000                                  N = 3  300       600       900   1200   1500                                  N = 4  400       800      1200   1600   2000                                  N = 5  500       1000     1500   2000   2500                                  ______________________________________                                    

The parameter T represents the number of subchannels where eachsubchannel has a bandwidth of approximately 3.3 Khz. N represents theaverage number of bits/symbol represented in all the subchannels. Thetable entries are given in kilobits/second.

An actual DMT rate table might add or drop subchannels by increments ofone. Also, the number of bits assigned to each subchannel can beindependently controlled. Thus, the DMT rate table has the potential forvery small rate increment adjustments.

The Software Driver Layer 7310,7410 communicates with the HardwareControl Layer 7320, 7420 by means of a rate table very similar to thosepreviously discussed. However, the table parameters and table entrieswill be different. After synchronization, demodulation, error-correctiondecoding, and the stripping of hardware control bits, the resulting ratetable for either of the underlying modulation schemes considered abovemight be:

                  TABLE 3                                                         ______________________________________                                        Rate Table Used for Interaction Between                                       the Software Driver Layer and the Hardware Control Layer                      cr1             cr2    cr3       cr4  cr5                                     ______________________________________                                        N = 2   192 kbits/s 384     576     768  960                                  N = 3   288         576     864    1152 1440                                  N = 4   384         768    1152    1536 1920                                  N = 5   480         960    1440    1920 2400                                  ______________________________________                                    

The column parameters are labeled as different channel resource modes(cr1, cr2. . . cr5), while the row parameters correspond to the averagenumber of bits represented by each symbol. The entries represent theachievable rates for the `Corrected` data stream in the VRDSL model.

Rate adjustment information between the Application Software Layer 7300,7400 and the Software Driver Layer 7310, 7410 can either be specified interms of a rate table or the total available throughput. For simplicity,the Software Driver Layer can indicate the total available rate to theApplication Software Layer. Management functions in the ApplicationSoftware Layer allocate portions of the total throughput to varioussoftware application programs. The following provides a conceptual viewof partitioning and managing the total data throughput.

Rate negotiation in the data link layer is initiated by the followingevents in VRDSL:

A request for changing the current allocation of the data connection orchannels in VRDSL such as requesting a new channel or changing anexisting channel rate

When VRDSL physical layer detects a total channel capacity change eithertotal channel capacity increase or decrease

After the initialization of VRDSL, a control channel (for example, of 16Kbps) has been allocated as an initial channel connection. This controlchannel will be reserved during the whole physical line connection time.It is used to send/receive all the control information including ratenegotiation information.

Rate negotiation in the data link layer can be described as a number ofsignal data formats and a finite-state automaton.

The rate negotiation signal data are encapsulated in the Data LinkControl Protocol such as the information field of the PPP data linklayer frame structure. The protocol field indicates type 0xc024 forVRDSL rate negotiation protocol. The packet format is depicted in FIG.7b. Code: The Code field is one octet and identifies the kind of ratenegotiation packet. Code 1-11 has been reserved for PPP LCP. It has thefollowing special definitions for VRDSL:

13 Channel map change Request

14 Channel map change Nak

15 Channel map change Reject

16 Channel map change Ack

ID: The ID field is one octet and aids in matching requests and replies

Length: The Length field is two octets and indicates the length of thewhole rate negotiation signal data packet.

Channel Map Data: The Channel Map Data Field is 2 or more octets whichreflects the current channel allocation in the VRDSL line and therequest for a channel change. It contains its own header and two partsof information represented by channel entry field:

Current channel map

Channel map change request

These two parts of information are all described by the 2 octet channelentry field. The way to distinguish them is that for channel map changerequest, the most significant bit of the channel entry is set high.

The Channel Map Data field is depicted in FIG. 7c.

When the code is 14 (Channel Map Change Nak), the Channel Map Data fieldcontains: Total Capacity, Available Capacity, the current channel mapand one or more channel entries which have been Naked. These Nakedchannel entries are flagged by their most significant bit (msb). Whenthe code is 15 or 16, the Channel Map Data field contains: TotalCapacity, Available Capacity and current channel map data.

Checksum: The Checksum field is computed using the standard TCP/IPalgorithm: the one's complement of the sum of all 16-bit integers in themessage (excluding the checksum field).

The Link Layer Rate Negotiation is also called Channel Map Change (CMC)in VRDSL. A CMC procedure is described by the state change triggered bya specific event and action. FIGS. 7d and 7e depict state diagrams forthe link layer rate negotiation during an active and passive CMCprocess, respectively.

Based on the VRDSL communication model, modem hardware capable ofvarying the transmission rate, and variable-rate management software,the rate negotiation method shown in FIG. 7f may be employed. FIG. 7fdepicts a simplified functional diagram of the overall rate negotiationmethod.

Current QAM based voice-band modems make use of a handshake sequencebetween calling and answering modems to initialize their communications.To gain synchronization, the answering modem transmits alternatingsymbols of the corresponding constellation points. As an example, V.32modems use the constellation points A,B,C, and D in FIG. 8a in thesynchronization process. The answering modem transmits alternatingsymbols ABABAB . . . for a duration of 256 symbols. After 256 symbols,the alternating symbols CDCDCD . . . is transmitted for 16 symbols. Thetransition period between the two symbol sequences provides awell-defined event that may be used for generating a time reference inthe calling modem receiver. After the second symbol sequence theanswering modem will start transmitting a symbol sequence that is knownby both modems. This sequence is used to train the equalizer at thecalling modem receiver. FIG. 8a depicts a V.32 training constellation.

The frequency response of the voice-band channel (30 Hz to 3.3 KHz) isnominally flat. The alternating ABAB . . . and CDCD . . . symbols can bereliably detected before equalization of the channel. However, this isnot the case for the MDSL modem. For a 1/4 T1, modems use the spectrumup to 500 KHz of the telephone line. FIG. 8b shows the frequencyresponse of a telephone CSA loop 6. A startup procedure that allows forpartial equalization of the line is required before timingsynchronization is attempted.

A preferred embodiment uses a startup handshake procedure for the MDSLmodem. It uses an algorithm for implementation of the receiver portion.

FIG. 8c shows the time line for the proposed startup procedure for theCO and RU MDSL modems using CAP line code. The table below identifiesthe various segments of FIG. 8c.

    ______________________________________                                        Segment                                                                              Description                                                            ______________________________________                                        A,D    One orthogonal channel is a repeating K-symbol sequence                       using the maximum value of the CAP constellation. For 16                      constellation points, the channel can take on the values                      of +/-3.                                                                      The other orthogonal channel is a random sequence using all                   possible points of the CAP constellation. For 16 constellation                points, the channel can take on the values                                    of +/-1, or +/-3.                                                      B,E    One orthogonal channel is a length K sequence that is the                     inverted version of the K-symbol sequence used in segment A.                  The other orthogonal channel is a length K random sequence                    using all possible points of the CAP constellation. For 16                    constellation points, the channel can take on the values                      of +/-1, or +/-3.                                                      C,F    One orthogonal channel is a length L random sequence using                    all possible points of the CAP constellation. For 16                          constellation points, the channel can take on the values                      of +/-1, or +/-3.                                                             The other orthogonal channel is a length L random sequence                    using all possible points of the CAP constellation. For 16                    constellation points, the channel can take on the values                      of +/-1, or +/-3.                                                      ______________________________________                                    

The startup procedure is as follows:

CO MODEM

1. The CO modem is assumed to be always "on", but in an idle state. Itcontinuously transmits segment A and listens for segment D.

RU MODEM

1. The RU modem comes on line and starts listening for segment A fromthe CO modem.

2. Once it detects segment A, it begins transmitting Segment D.

CO MODEM

2. Once the CO modem detects segment D from the RU modem, it transmitssegments B,C, and valid data without further handshaking from the RUmodem.

RU MODEM

3. The RU modem listens for segment B and once detected, it transmitssegments E, F, and valid data without further handshaking from the COmodem.

4. The detection of segment B is the critical timing instant in thesynchronization procedure. After it is detected, the RU modem beginstraining its equalizer using data from segment C.

CO MODEM

3. The CO modem listens for segment E from the RU modem. The detectionof segment E is the critical timing instant in the synchronizationprocedure. After it is detected, the CO modem begins training itsequalizer using data from segment F.

The receiver makes use of cyclical equalization techniques to obtaininitial timing synchronization. On startup, the RU modem sets up afractional spaced adaptive equalizer that is equal in time duration to Ksymbol periods, for example, K may be 15. This will be called the syncequalizer. If the sync equalizer is operated at two times the symbolperiod, the number of taps required is 2xK. For four samples per symbolperiod, the number of taps required is 4xK and so on.

The receiver uses the same K-symbol sequence as the transmitter for thetraining data of the sync equalizer. Because the length of the equalizeris a multiple of the symbol sequence length, the relative phase betweenthe transmitted sequence and the receiver reference sequence does notmatter.

Once the sync equalizer mean square error falls below a threshold,segment A has been detected. The receiver stops the adaptation processand analyzes the coefficients. It then rotates the coefficients in acircular manner so that the N consecutive coefficients with the mostenergy are grouped at the front of the sync equalizer filter. N is thelength of the orthogonal adaptive filters used in CAP demodulation, (seethe following paragraphs). This aligns the symbol period of the receiverwith the symbol period of the transmitter.

After rotation, the receiver continues to filter the signal, but doesnot update the sync equalizer coefficients. The output of the syncequalizer is then passed to a length K matched filter. The matchedfilter is used to detect segment B. Its coefficients are the transmittedchannel sequence B. Since this sequence has only two values, a binarycorrelator could also be used.

When the output of the matched filter (correlator) is greater than athreshold. The receiver knows that the next symbol is the start of thetraining data. The receiver now implements the orthogonal adaptivefilters used in CAP demodulation. They again are fractionally spacedadaptive equalizers whose lengths depend on the impulse response of theactual physical channel. These demodulation equalizers are trained usingthe known training data of segment C. After training has completed thedemodulation equalizers enter a decision directed mode where thereference data comes from the CAP slicer.

Referring now to FIG. 9a, there may be seen a time domain equalizertraining sequence for use with DMT line code.

The portion of this invention for DMT, instead of using the usualfrequency domain training sequence, uses a time domain training sequencedepicted in FIG. 9a. The basic unit of the training sequence is a randomdata block {x_(n) }, 0<n<N. The entire sequence is arranged so therandom data block {x_(n) } repeats in time with the sign of data blockalternating every two blocks as shown in FIG. 9a.

For easy description purposes, the following notations are used: timedomain equalizer taps w₁ ; channel impulse response (including timedomain equalizer) h_(k) ; the receiver data before the equalizer y_(m)[n], and after the equalizer z_(m) [n], where m denotes the label ondata block. The received signals corresponding to the transmittedsignals in FIG. 9a are as follows: frame number ##EQU4## where, p_(n) isthe pilot tone superimposing on the training sequence. The second termson the right hand side of the equations are attribute to theinter-symbol interference from the previous frame. The second term canbe separated from the first term by performing the operation: frame 4. -frame 1. ##EQU5## Assuming prefix length is L, the ideal channel impulseresponse is ##EQU6## The condition (2) can be satisfied if the timedomain equalizer w₁ is chosen such that

    err[n]=0,for n>L-1.                                        (3)

It is easy to prove that equation (3) leads to a set of linear equations##EQU7## If the training sequence is chosen such that X_(N-1) ≡/0, theunique solution of equations (4) will be h_(k) =0, for k>L. Which is thesame as (2).

Since ##EQU8## equation (1) can be alternately written as ##EQU9##Combining (3) and (5) and using general LMS algorithm, w₁ may be foundby doing iterations:

    w.sub.1 [k+1]=w.sub.1 [k]-2·μ·err [n]·(y.sub.4 [n-1]-y.sub.1 [n-1]),n>L-1          (6)

The frame boundary information can also be derived from above trainingsequence. As seen in Eq. (1), if the block of the training sequence ismuch longer than the channel impulse response, err[n] approaches zero ash_(N=k) →0 when n increases to the end of frame 4. However, when datastarts in frame 5, ##EQU10## For ADSL applications, since there is highattenuation in copper wire at high frequency, the channel impulseresponse h_(k) does not expect to flip the sign very frequently. If thevalues of x_(n) at the beginning of the training block {x_(n) ] have thesame sign, the summation in equation 7 will be constructive.Consequently the amplitude of err[n] starts to increase at frameboundary n=0. FIG. 9b shows the time sequence of err[n]. As shown inFIG. 9b, the rising edge of the derived sequence err[n] can be used forframe synchronization, and the trailing edge of err[n] can be used fortime domain equalizer training. For the same reason as that of in therising edge of err[n], to make the summation in equation (1)constructive the elements of the training sequence at the end of blockx_(N-k) should also have the same sign.

The above sequence can also be easily detected by doing the operation

    det[n]=z.sub.3 [n]+z.sub.1 [n]=2·p.sub.n          (8)

Comparing the power of frame det[n] pwr₋₋ det to the power of frame z[n]pwr, if pwr₋₋ det<<pwr, it indicates that the training sequence has beendetected. To end the training sequence, one can send the data blockpattern as shown in FIG. 9c. Then the corresponding received signal are:Frame: ##EQU11## In this case the detection signal is ##EQU12## Thepower of this detection frame is greater than that of the data frame,pwr₋₋ det>pwr. Once pwr₋₋ det>pwr is detected in the received datastream, the DMT receiver determines that it is the end of trainingsequence. Since the data pattern for the end of the training sequence isinserted in the frame 5, which is used for frame boundary detectionrather than time domain equalizer training, it will not affect timedomain equalizer update.

Following the time domain equalizer training, the transmitter shouldsend another sequence {y_(n) } to train the frequency domain equalizer.The frequency domain equalizer training sequence can be made of exactlythe repeatable block {y_(n) }. FIG. 9d shows the entire trainingsequence. In the regime of training sequence {y_(n) } pwr₋₋ det remainshigh.

The line management part of the MDSL allows the host software topreconfigure configure the MDSL to work under Leased Line with SingleLink mode. Currently, MDSL uses the following modes:

Leased line with single link (LLSL)

Leased line with multiple links (LLML)

Switched line with soft dial (SLSD)

Switched line with hard dial (SLHD)

Under the LLSL mode, the telecommunication line is solely committed tothe MDSL communications with a remote MDSL system. Only one data link isallowed under this line connection mode. So the link management is thesame as the line management.

The LLML mode works the same as the LLSL except that it allows multiplelink connections at different speeds within the same leased line. Thenumber of links and the link speed can be configured dynamically to thecapacity of the line speed. Under this mode, each link works like anindependent leased line and follows the same line management scheme,except that it is link oriented.

The SLSD mode works on a switched MDSL line on which the MDSL-R modem isdialed automatically by the MDSL-C which is controlled by a remoteserver. Under this mode, the line management follows a special MDSLdial-up procedure that is independent from the Plain Old TelephoneService (POTS) line. The MDSL modem dial-up procedure is defined by theMDSL modem's internal initialization process. It has 2 dial-up IDs, onerelated to the MDSL-C port and the other related to the MDSL-R modem.The ID for MDSL-C port could be just the subscriber phone number plus 1digit; by choosing it to be 0 and the ID for the MDSL-R modem could bethe subscriber phone number also plus 1 digit selected to be 1. Theother 8 values, from 2 to 9, are reserved.

The SLHD mode works in a way similar to that of voice-band modem butwith MDSL dial-up procedure. The MDSL modem will either store a phonenumber or be dialed manually by an application.

The following sections will describe the MDSL line connection managementunder Leased Line with Single Link mode as an example of modeoperations.

The MDSL Line Management Host Interface allows the host software toconfigure a line to be ready to send/receive data packets. Host softwarecan also manually halt the line connection to stop the data flow.

The line configuration command in MDSL Line Management Host Interface isused for host software to configure a line into one of the MDSLsupported line modes. Under LLSL mode, it also sets up thesending/receiving data rate, maximum frame size and data link protocol.This command is usually called during the MDSL initialization or errorrecovery process. After a successful execution of this command, the MDSLunder configuration is ready to send/receive data packets through theline. For LLML, a data link has to be opened/created to allow the dataflow. The line configuration of MDSL is an asynchronous procedure. TheHOST will be notified that the line has been successfully configured bythe "line connected" interrupt generated by MDSL. The line configurationprocess in MDSL is depicted in FIG. 10a. Host Interface:

MdslLineConfigure(IN LineMode, IN TxSpeed, IN RxSpeed, INMaxTx-FrameSize, IN MaxRxFrameSize, IN TxProtocol, IN RxProtocol)

The LineMode input parameter specifies which line mode the MDSL is to beconfigured for. It has the following definitions:

0 - leased line with single link

1 - leased line with multiple links

2 - switched line with soft dialup

3 - switched line with hard dialup

The TxSpeed and RxSpeed give the upstream and downstream line speed.

The MaxTxFrameSize and MaxFrameSize parameters specify the maximum framefor sending and receiving data.

The TxProtocol and RxProtocol define the physical layer framing protocolused for transmitting data. Currently it has the following definitions:

Bit 0 - Bit 1 define framing protocol name:

00 - Raw MDSL (no data packetizing)

01 - MDSL specific packetizing

10 - HDLC (High-level Data Link Control)

Bit 2 indicates if there is packet header compression.

Bit 3 indicates if there is packet data compression.

Bit 4 indicates if the data is encrypted.

In MDSL Line Management Host Interface, the Halt Line command tells MDSLto stop sending/receiving data for the data flow control. It flushes allthe internal data transmit buffers and status flags and sends a messageto the remote MDSL to notify the request and manually put the line into"line disconnected" state. This command will take effect only when theline is in "line connected" state. Otherwise, it will return error. HaltLine is an asynchronous process, the HOST will be notified when the linehas been put into the "line disconnected" state as depicted in FIG. 10b.Host Interface:

MdslHaltLine()

Inside MDSL there is a line state engine used to monitor the line statusfor reporting line hanging or unexpected incidents. In MDSL leased linemode the following line states are defined:

Line Drop--line is unplugged or broken, no physical signal is received

Line Disconnected--line is physically connected but is not ready fordata transmission

Line Connected--line is ready for sending/receiving data packets

MDSL Line Management Host Interface provides two ways to get the linestatus information.

One way is calling Get Line Status command:

MdslGetLineStatus(OUT LineStatus, OUT LineConfigure)

The LineStatus parameter returns the MDSL line status informationdescribed above. The LineConfigure is a structure which is used to storethe line configuration information set by MdslLineConfigure() command.

The other way for the host software to be notified of the line statuschange is by registering the line management events. MDSL will allowhost software to be interrupted when certain events happened. The eventsrelated with line management are:

Line connected: A line connection has just been established

Line disconnected: A previously connected line has been disconnected byeither Mdslhaltline() call or some un-expected incidents.

Line dropped: A line has been physically disconnected. No signal can bereceived in the line.

There is also a timer interrupt provided by MDSL to allow the hostsoftware to poke the line status periodically, as depicted in FIG. 10c.

The line connection messages need to be exchanged between two MDSL endsconnected to each other. These messages are defined as special linemanagement packets in MDSL.

In order to exchange Line Connection Management Information betweenMDSL-C and MDSL-R, the following kinds of Line Control Message Packetsare defined:

Line Configuration Command Packet

Line Halt Command Packet

Acknowledgment Packet

Referring now to FIG. 10d, there may be seen a depiction of the formatfor the line configuration command packet.

ID is 1 octet and aids in matching commands and replies.

Length is the packet length in octets.

Configuration Data Contains the following information:

Line Mode defined previously

Data Sending Speed

Data Receiving Speed

Maximum Sending Frame Size

Maximum Receiving Frame Size

Data Sending Protocol defined previously

Data Receiving Protocol defined previously

Checksum is computed using the standard TCP/IP algorithm: the one'scomplement of the sum of all 16-bit integers in the message (excludingthe checksum field).

Referring now to FIG. 10e, there may be seen a depiction of the formatfor the line halt command packet.

ID is 1 octet and aids in matching commands and replies.

Length is the packet length in octets.

Checksum is computed using the standard TCP/IP algorithm: the one'scomplement of the sum of all 16-bit integers in the message (excludingthe checksum field).

Referring now to FIG. 10f, there may be seen a depiction of the formatfor the acknowledgement packet.

Code defines what kind of acknowledgment packet it is. It has thefollowing definitions:

2 - Line Configuration Acknowledgment

4 - Line Configuration Reject

6 - Line Halt Acknowledgment

ID is 1 octet and aids in matching commands and replies.

Length is the packet length in bytes.

Status Code has the following definitions:

SUCCESS

Unrecognized packet ID

Part of the configuration data is not acceptable

Configuration is completely rejected

Checksum error

Data contains 0 or even number of octets specifying which part of theconfiguration data is not acceptable on the remote end.

Checksum is computed using the standard TCP/IP algorithm: the one'scomplement of the sum of all 16-bit integers in the message (excludingthe checksum field).

After power on, the MDSL-R automatically precedes with its internalinitialization process. This process contains four steps: channelprobing, line code selection, rate negotiation and transceiver training.After the initialization procedure, the MDSL-R transitions to a stand-bymode. The line state at this moment is "disconnected" as defined before.Upon detecting that the line has been physically connected, the HOSTsoftware will send a MdslLineConfigure() command to MDSL-R for lineconfiguration. MDSL-R then sends out a line configuration command packetto MDSL-C with the configuration data. After receiving the lineconfiguration command and checking the configuration data, MDSL-C willsend out an acknowledgment packet to confirm the line configuration. Ifthe MDSL-C cannot accept the configuration data, it will send aconfiguration reject packet. It will also give the status messagespecifying what kind error it is. If only part of the configuration datais not acceptable, the data field will contain the configuration datawhich is not acceptable, as depicted in FIG. 10g.

After the connection is established, it stays connected until thefollowing events happen:

The line is unplugged or broken

The MDSL-R is powered down

The MDSL-C is out of service

Whenever MDSL-C is going to shut down or MDSL-R is powered down, a LineHalt command packet will be sent out. The command sender will keepsending out the Line Halt command packet until either an acknowledgmentpacket has been received or Line Halt command timed out. At the receiversite, after sending an acknowledgment packet back to the message senderto confirm that the line is disconnect, it clears up all the internaldata buffers and status flags. The line state then changed into "linedisconnected" state. FIG. 10h gives an example of the MDSL-C sending outa Line Halt Command before it is out of service.

The MDSL host interface is intended to provide a simple, user friendly,efficient and low-cost interface to a 16-bit host controller. The hostinterface will provide the following functions:

Command/control communications between the host and the MDSL NetworkInterface Card (NIC)

Line connection management

Send/receive data packets

The host command/control communication functions include initializingthe device, downloading DSP code to the local RAM if it is not in theEEPROM, sending commands to MDSL, monitoring and reporting statuschanges.

The line connection signaling between two MDSL-C and MDSL-R can bedifferent according to different line modes: dialup-line mode andleased-line mode. The dialup-line mode will provide the basictelephony--a guaranteed set of functions that correspond to POTS. Underthis mode, the system software and hardware has to work with theTelephony Application Programming Interface (TAPI) on the MDSL-R siteand Telephony Service Provider Interface (TSPI) on the MDSL-C site toestablish the connection. Under the leased-line mode, the connectionwill be established immediately after the initialization of the MDSL.But it does not provide standard POTS service.

Physical layer packetizing is preferably used for MDSL (such as HDLC).The maximum packet size for the PPP is 1500 bytes, but it should allow32 bytes overhead for the frame. MDSL will send data from packet bufferto the line and notify the host that the packet has been set out. Itwill also notify the host when a new packet has been put into thereceiving buffer. The sending and receiving buffer can be a sharedmemory on MDSL.

The following commands and controls may be employed:

1. Reset Syntax: Reset() Description: Halts all of the commandexecutions in the system. Flushes the transfer/receive buffer andperforms an internal reset. Parameter: None Return: None

2. Load DSP Module Syntax: LoadDspModule(ModuleAddr, ModuleSize)Description: Loads the DSP module into the MDSL Parameter:ModuleAddr--DSP module start address ModuleSize--DSP module size Return:None

3. Set Interrupt Mask Syntax: SetInterruptMask(EventMask) Description:Enable interrupt of host processor, based on occurrence of selectedevent(s) Parameter: EventMask is a 16 bit integer value for theinterrupt mask. Table 1 identifies the bits in the mask. A value of 1for a bit enables the interrupt corresponding to that bit. All bits notdefined in the table are reserved for future use and should be set tozero.

                  TABLE 1                                                         ______________________________________                                        Bit Definitions for EventMask Parameter                                       Bit #                                                                              Mnemonic Event        Event Definition                                   ______________________________________                                        0    INTE     Interrupt Enable                                                                           This bit enables the interrupt set                                            by the EventMask                                   1    LNC      Line Connected                                                                             A line connection has been                                                    established                                        2    LNDC     Line Disconnected                                                                          A previously connected line has                                               been disconnected                                  3    BFOVF    Rx Buffer Overrun                                                                          The line receiving buffer is                                                  overrunning                                        7    BFEMP    Tx Buffer Empty.sup.a                                                                      The line transfer buffer is empty                  9    PKARV    Packet Arrival                                                                             A packet has been put into the                                                line receiving buffer                              10   PKST     Packet Sent  A packet has been moved out of                                                the data line sending buffer                       15   TINT     Timer Expires                                                                              A preset timer count goes to                       ______________________________________                                                                   0                                                   .sup.a This interrupt is redundant with the packet sent interrupt if          transmit buffer can only hold one packet at a time.                      

4. Get Interrupt Status Syntax: GetInterruptStatus() Description: Getthe interrupt status, based on the occurrence of the selected event(s).Parameter: None Return: EventStatus. MDSL will return a 16 bit statusnumber which corresponds to the definition of the EventMask parameter inTable 1. Calling this function will clear the interrupts just fired.

The following Line Connection Management commands are available:

1. Line Configuration Syntax: LineConfigure(LineMode) Description:Configure the line to be ready to receive and send data packetsParameter: LineMode indicates what kind of line mode MDSL is going to beconfigured. It is has the following bit definitions. All the undefinedbits will be reserved for future use.

                  TABLE 2                                                         ______________________________________                                        Bit Definitions For LineMode Parameter                                        Bit #                                                                              Mnemonic Event       Event Definition                                    ______________________________________                                        0             Line Mode   When this bit set, the data line will                                         work under the leased line mode.                                              When this bit is cleared, the data                                            line will work under dial-up mode.                  1             Voice Line Flag                                                                           When this bit is set, the voice                                               signal transmission will function at                                          the same time with the data signal                                            transmission in MDSL. When this                                               bit is cleared, the voice-band                                                cannot function at the same time.                   2-6           Speed Definition                                                                          These bits define the speed for                                               sending and receiving data. Bit 6                                             indicates if the speed is for sending                                         or receiving. Bit 2 to 5 define 16                                            different speeds.                                   ______________________________________                                    

Return: None

2. Get Line Status Syntax: GetLineStatus() Description: This commandwill return a 16 bit number to indicate the current line status.Parameter: None Return: LineStatus. The definition of this returnednumber is in Table 3.

                  TABLE 3                                                         ______________________________________                                        Bit Definitions For LineStatus                                                Bit #                                                                              Mnemonic Event       Event Definition                                    ______________________________________                                        0-1           Line Status These two bits indicate the                                                   following line states:                                                        1. Line is down (no physical signal                                           is received)                                                                  2. Line is disconnected (line is not                                          ready for sending and receiving                                               data)                                                                         3. Line is connected (line is ready                                           for sending data)                                   2             Line Mode   When this bit set, the data line will                                         work under the leased line mode.                                              When this bit is cleared, the data                                            line will work under dial-up mode.                  3             Voice Line Flag                                                                           When this bit is set, the voice                                               signal transmission will function at                                          the same time with the data signal                                            transmission in MDSL. When this                                               bit is cleared, the voice-band                                                cannot function at the same time.                   4-8           Speed Definition                                                                          These bits define the speed for                                               sending and receiving data. Bit 8                                             indicates if the speed is for sending                                         or receiving. Bit 4 to 7 define                                               16 different speeds.                                ______________________________________                                    

3. Halt a Connected Line Syntax: HaltLine() Description: Tell MDSL tostop sending/receiving data for the data flow control. It will flush allthe internal buffers and manually put the line into a "disconnected"state. Parameter: None Return: None

The following Sending/Receiving Data Packet commands are available.

1. Send Packet Syntax: SendPacket(DataPtr, Size) Description: Thiscommand tells MDSL that one data packet has been copied into MDSLsending buffer. An interrupt will be generated after the packet has beenmoved out of the buffer. Parameter: DataPtr Points to the memory addressof the sending buffer where the data packet is stored. The length of thepacket should be less than or equal to the maximum allowed packet size.Return: None

2. Check Receive Information Syntax: CheckReceiveInfo(DataPtr, Size,ErrorFlag) Description: This command returns TRUE (1) or FALSE (0)depending on if there is a packet in the receiving buffer. Parameter:DataPtr is used to return the memory address where the packet is stored.Size is used to return the size of the packet received. ErrorFlag is setto non-zero if there is any error happened during the transmission.Return: 1--There is data in the receiving buffer 0--No data is in thereceiving buffer.

3. Check Sending Information Syntax: CheckSendInfo() Description: Thiscommand returns 0 if MDSL transmit buffer is empty. Otherwise, itreturns the number of bytes left in the buffer. Parameter: None Return:Sending buffer data size. It is 0 when the transmit buffer is empty.Otherwise it is the number of bytes left in the transmit buffer.

FIGS. 11a-b illustrates the software structure of the driver for modem100 used with a host having a Windows 95 or Windows NT environment, ascommonly would be the situation for a personal computer in a residence.FIG. 11c illustrates the software driver structure more generally.

The system software of the MDSL NIC has been implemented as an NDIS 3.0WAN mini-port driver for Windows NT 3.5 and Windows 95 OperatingSystems.

The following is broken down from the following three perspectives:

1. The functionality of the system by virtue of the system softwarebeing implemented as a mini-port device driver under Windows NT 3.51 andWindows 95

2. The input and output data processing that the system performs

3. The interaction of the system software with NDIS library

The MDSL driver will be implemented as an NDIS miniport driver tocontrol and manage the Media Access Control (MAC) sub-layer of thenetwork system. It's structure is described in FIG. 11b. It will be acomponent within the Windows NT or Windows 95 Internet system software.The MDSL driver will follow the definitions of the interface and datastructures specified in NDIS 3.0. The driver needs to be installed orintegrated into the system in order to make it function.

The MDSL driver will function as a WAN Network Interface Card driver. Itinteracts with protocol drivers on the upper edge and controls the MDSLNIC on the lower edge. All these interactions and controls are goingthrough the NDIS library or NDIS wrapper in Windows NT/Windows 95.

FIG. 11d depicts the data flow path in the system software. FIG. 11ddepicts how incoming data is received by the NIC card and passed to thedriver where it is passed to the transport interface via variousfunctions and how it is returned to the driver.

The MDSL driver will come with the MDSL network adapter. It can beinstalled together with the MDSL-R into a PC at home and connected withthe MDSL-C running the same driver although the MDSL-C modulationalgorithm could be different. With an Internet router on the MDSL-Csite, the MDSL-R can run a lot of internet applications such as TELNET,FTP and NetScape through MDSL NIC. The data communication and voicecommunication can occur simultaneously.

The following entry points or functions are completely compliant withNDIS 3.0 specification.

Driver Entry Point (Driver Entry) is the main entry point called by theoperating system when the driver is loaded into memory.

Inputs

DriverObject: Pointer to driver object created by the operating system.

RegistryPath: Pointer to registry path name used to read registryparameters.

Outputs

Return Values: STATUS₋₋ SUCCESS or STATUS₋₋ UNSUCCESSFUL DriverEntrywill do:

1. Call NdisMInitializeWrapper to initialize the NDIS WAN wrapper.

2. Initialize the characteristics table and export the MDSL driver'sentry points to the NDIS WAN wrapper.

3. Call NdisMRegisterMiniport to register the MDSL driver to the NDISWAN wrapper.

FIG. 11e depicts the interaction between the OS, NDIS library and MDSLdriver for Driver Entry.

The initialization entry point (MdslInitialize) will be called by NDISlibrary to initialize the MDSL modem.

Inputs

MediumArray: All the networking media the NDIS library supported

MediumArraySize: The number of elements in the medium array

MdslAdapterHandle: A handle identifying the MDSL driver assigned by theNDIS library

NdisConfigContext: A handle for NDIS configuration

Outputs

OpenErrorStatus: MDSL driver will set this parameter to a status valuespeciying information about the error if the return value is NDIS₋₋STATUS₋₋ OPEN₋₋ ERROR.

SelectedMediumIndex: MDSL driver sets this index to the MediumArray thatspecifies the medium type of the MDSL driver.

Return Values: MdslInitialize returns NDIS₋₋ STATUS₋₋ SUCCESS or it canreturn the following status values:

NDIS₋₋ STATUS₋₋ ADAPTER₋₋ NOT₋₋ FOUND

NDIS₋₋ STATUS₋₋ FAILURE

NDIS₋₋ STATUS₋₋ NOT₋₋ ACCEPTED

NDIS₋₋ STATUS₋₋ OPEN₋₋ ERROR

NDIS₋₋ STATUS₋₋ RESOURCES

NDIS₋₋ STATUS₋₋ UNSUPPORTED₋₋ MEDIA

Processing

The MdslInitialize will:

1. Search through the MediumArray to find its medium match. If no matchis found NDIS₋₋ STATUS₋₋ UNSUPPORTED₋₋ MEDIA is returned.

2. Get all the configuration information of MDSL NIC (interrupt number,board name, channel address or line address, switch type, etc.)

3. Allocate and initialize memory for MDSL driver data structures.

4. Inform NDIS wrapper the physical attributes of MDSL NIC includingassociate the MdslAdapterHandle with MDSL NIC

5. Map MDSL NIC's physical location into the system address space.

6. Reset or initialize the MDSL NIC

7. Setup and initialize the transmit queues

8. Initialize interrupt

9. Initialize line

FIG. 11f depicts the interaction between the NDIS library and the driverfor MdslInitialize.

Entry point (MdsIReset) issues a hardware reset to the MDSL NIC andresets its software state.

Inputs

MdslAdapterContext: The handle initialized by Miniportinitialize

Outputs

AddressingReset: Set to TRUE if the NDIS library needs to callMdslSetInformation to restore addressing information to the currentvalues.

Return Values: None

Processing

MdslReset will issue a software reset on the MDSL NIC. It may also resetthe parameters of MDSL NIC. If a hardware reset of MDSL NIC resets thecurrent station address, the MDSL driver automatically restores thecurrent station address following the reset.

FIG. 11g depicts the interaction between the NDIS library and the driverfor MdsIReset.

Entry point (MdslReconfigure) is called by NDIS library to reconfigurethe MDSL NIC to new parameters available in the NDIS library functions.It is used to support plug and play adapters and software configurableadapters, which may have the parameters changed during run time.

Inputs

MdslAdapterContext: The handle initialized by MiniportInitialize

WrapperConfigurationContext: The handle of NDIS configuration.

Outputs

OpenErrorStatus: This parameter is set by MDSL driver to specify theinformation about the error if the return value is NDIS₋₋ STATUS₋₋OPEN₋₋ ERROR.

Return Values:

NDIS₋₋ STATUS₋₋ SUCCESS

NDIS₋₋ STATUS₋₋ NOT₋₋ ACCEPTED

NDIS₋₋ STATUS₋₋ OPEN₋₋ ERROR

Processing

Returns NDIS₋₋ STATUS₋₋ NOT₋₋ ACCEPTED.

Entry point (MdslHalt) is called by NDIS library to halt the MDSL NIC.

Inputs

MdslAdapterContext: The handle initialized by MdslInitialize

Outputs

None.

Process

The MdslHalt will:

1. Deregister the interrupt handling

2. Unmap the MDSL memory from the system

3. Free system memory

FIG. 11h depicts the interaction between the NDIS library and the driverfor MdslHalt.

Entry point (MdslCheckForHang) is called by NDIS library periodically tocheck the state of MDSL NIC.

Inputs

MdslAdapterContext: The handle initialized by MdslInitialize

Outputs

Return Value: TRUE if the MDSL NIC is not operating

Processing

Checks the MDSL NIC status.

Entry point (MdslEnableInterrupt) is called by NDIS library to enablethe MDSL NIC to generate interrupts.

Inputs

MdslAdapterContext: The handle initialized by MdslInitialize

Outputs

Return Value: None

Process

Enable the MDSL NIC hardware to generate interrupts.

Entry point (MdslDisableInterrupt) is called by NDIS library to disablethe MDSL NIC from generating any interrupts.

Inputs

MdsLAdapterContext: The handle initialized by MdslInitialize

Outputs

Return Value: None

Process

Disable the MDSL NIC hardware from generating any interrupts.

MdslISR is the MDSL driver interrupt service routine entry point.

Inputs

MdslAdapterContext: The handle initialized by MdslInitialize

Outputs

InterruptRecognized: If the MDSL NIC is sharing an interrupt line and itdetects that the interrupt came from its NIC, MDSL driver will set thisparameter to be TRUE.

QueueMdslHandleInterrupt: If MDSL NIC is sharing an interrupt line andif MdslHandlelnterrupt must be called to finish handling of theinterrupt, this parameter will be set to be TRUE.

Return Value: None.

Processing

This function runs at a high priority in response to an interrupt. Itleaves lower priority work to MdslHandleInterrupt. It will do:

1. Get interrupt reason

2. Clear interrupt in hardware

3. Set InterruptRecognized and QueueMdslHandleInterrupt accordingly.

Entry point (MdslHandleInterrupt) is called by the deferred processingroutine in the NDIS library to process an interrupt.

Inputs

MdsLAdapterContext: The handle initialized by MdslInitialize

Outputs

Return Value: None

Processing

The MdslHandleInterrupt will do:

1. Check MDSL NIC to get the reason for the interrupts

2. Process the following possible interrupts one by one:

A packet has just been put into the receiving buffer

A packet has just been sent out

Line has just been connected

Line is disconnected

Line has been down

receiving buffer overrun

Entry point (MdslQueryInformation) is called by NDIS library to querythe capabilities and status of the MDSL driver.

Inputs

MdsLAdapterContext: The handle initialized by MdslInitialize

OID: Object ID of a managed object (or information element) in theManagement Information Block where the driver stores dynamicconfiguration information and statistical information. Refer to NDIS 3.0specification for its formats and definitions.

InformationBuffer: A buffer that will receive information

InformationBufferLength: The length in bytes of InformationBuffer

Outputs

BytesWritten: The number of bytes actually written to InformationBuffer

BytesNeeded: The number of additional bytes needed to get the completeinformation for the specified object.

Return Values: MdslQueryInformation returns NDIS₋₋ STATUS₋₋ SUCCESS orthe following status values:

NDIS₋₋ STATUS₋₋ INVALID₋₋ DATA

NDIS₋₋ STATUS₋₋ INVALID₋₋ LENGTH

NDIS₋₋ STATUS₋₋ INVALID₋₋ OID

NDIS₋₋ STATUS₋₋ NOT₋₋ ACCEPTED

NDIS₋₋ STATUS₋₋ NOT₋₋ SUPPORTED

NDIS₋₋ STATUS₋₋ PENDING

NDIS₋₋ STATUS₋₋ RESOURCES

Processing

MDSL driver will only acknowledge the following OIDs synchronously:

OID₋₋ GEN₋₋ HARDWARE₋₋ STATUS: check the hardware status of MDSL NIC

OID₋₋ GEN₋₋ MEDIA₋₋ SUPPORTED: return NdisMediumWan

OID₋₋ GEN₋₋ MEDIA₋₋ INUSE: return NdisMediumWan

OID₋₋ GEN₋₋ MAXIMUM₋₋ LOOKAHEAD: return maximum packet size (1532bytes).

OID₋₋ GEN₋₋ MAXIMUM₋₋ FRAME₋₋ SIZE: return maximum frame size for MDSL(1500 bytes).

OID₋₋ GEN₋₋ LINK₋₋ SPEED: return link speed of MDSL (384000 bps).

OID₋₋ GEN₋₋ TRANSMIT₋₋ BUFFER₋₋ SPACE: return maximum packet size(assuming there is only one packet allowed in the transmit buffer).

OID₋₋ GEN₋₋ RECEIVE₋₋ BUFFER₋₋ SPACE: return maximum packet size inreceiving buffer (assuming only one packet is allowed).

OID₋₋ GEN₋₋ TRANSMIT₋₋ BLOCK₋₋ SIZE: return maximum packet size.

OID₋₋ GEN₋₋ RECEIVE₋₋ BLOCK₋₋ SIZE: return maximum packet size.

OID₋₋ GEN₋₋ VENDOR₋₋ ID: return vendor ID.

OID₋₋ GEN₋₋ VENDOR₋₋ DESCRIPTION: return vendor description string.

OID₋₋ GEN₋₋ CURRENT₋₋ LOOKAHEAD: return maximum packet size.

OID₋₋ GEN₋₋ MAC₋₋ OPTIONS: The following bits will be set:

NDIS₋₋ MAC₋₋ OPTION₋₋ RECEIVE₋₋ SERIALIZED,

NDIS₋₋ MAC₋₋ OPTION₋₋ NO₋₋ LOOPBACK and

NDIS₋₋ MAC₋₋ OPTION₋₋ TRANSFERS₋₋ NOT₋₋ PEND

OID₋₋ GEN₋₋ DRIVER₋₋ VERSION: return MDSL driver major and minor versionnumber.

OID₋₋ GEN₋₋ MAXIMUM₋₋ TOTAL₋₋ SIZE: return maximum packet size.

OID₋₋ WAN₋₋ MEDIUM₋₋ SUBTYPE: Since MDSL is not yet defined byMicroSoft, NdisWanIsdn is returned.

OID₋₋ WAN₋₋ GET₋₋ INFO: return NDIS WAN info structure.

OID₋₋ WAN₋₋ PERMANENT₋₋ ADDRESS: return WAN address.

OID₋₋ WAN₋₋ CURRENT₋₋ ADDRESS: return WAN address.

OID₋₋ WAN₋₋ GET₋₋ LINK₋₋ INFO: return MdslLinkContext

For all the other Oids return NDIS₋₋ STATUS₋₋ INVALID₋₋ OID

FIG. 11i depicts the interaction between the NDIS library and the driverfor MdslQueryInformation.

Entry point (MdslSetInformation) is called by NDIS library to change theinformation maintained by the MDSL driver.

Inputs MdslAdapterContext: The handle initialized by MdslInitialize

OID: Object ID of a managed object (or information element) in theManagement Information Block where the driver stores dynamicconfiguration information and statistical information. Refer to NDIS 3.0specification for its formats and definitions.

InformationBuffer: A buffer that stores information

InformationBufferLength: The length in bytes of InformationBuffer

Outputs

BytesRead: The number of bytes read from InformationBuffer

BytesNeeded: The number of additional bytes needed to satisfy the OID.

Return Values: MdslQueryInformation returns NDIS₋₋ STATUS₋₋ SUCCESS orthe following status values:

NDIS₋₋ STATUS₋₋ INVALID₋₋ DATA

NDIS₋₋ STATUS₋₋ INVALID₋₋ LENGTH

NDIS₋₋ STATUS₋₋ INVALID₋₋ OID

NDIS₋₋ STATUS₋₋ NOT₋₋ ACCEPTED

NDIS₋₋ STATUS₋₋ NOT₋₋ SUPPORTED

NDIS₋₋ STATUS₋₋ PENDING

NDIS₋₋ STATUS₋₋ RESOURCES

Processing

MDSL driver will only acknowledge the following OIDs synchronously:

OID₋₋ GEN₋₋ CURRENT₋₋ LOOKAHEAD: return NDIS₋₋ STATUS₋₋ SUCCESS directlywithout doing anything since WAN drivers always indicate the entirepacket regardless of the lookahead size.

OID₋₋ GEN₋₋ WAN₋₋ SET₋₋ LINK: copy the MdslLinkContext stored in theInformationBuffer into MDSL WanLinkInfo structure.

For all the other OIDs return NDIS₋₋ STATUS₋₋ INVALID₋₋ OID

FIG. 11j depicts the interaction between the NDIS library and the driverfor MdslSetInformation.

Function (MdslReceivePacket) is called by MdslHandleInterrupt to handlea packet receive interrupt. This function is used to replace NDISMdslTransferData entry point since MDSL driver does not callNdisTransferData to transfer data from receiving buffer to the protocolstack.

Inputs

MdslAdapterContext: The MDSL adapter handle initialized byMdslInitialize

Outputs

None

Return Value: None.

Process

MdsIReceivePacket will do:

1. Check receive status to see if there is any error during datatransmission. Drop the bad packets and indicate the error to the NDISwrapper.

2. Call NdisMWanIndicateReceive to indicate that a packet has arrivedand that the entire packet is available for inspection.

3. If the above call returns NDIS₋₋ STATUS₋₋ SUCCESS, callNdisWanIndicateReceiveComplete to indicate the end of a receive event.

FIG. 11k depicts the interaction between the NDIS library and the driverfor MdslReceivePacket.

Entry point (MdslWanSend) is called by NDIS library to instruct MDSL NICdriver to transmit a packet through the adapter onto the medium. If themedium is busy at the moment when this call comes, MDSL driver willqueue the send command for a later time or lower the Maximum Transmitvalue.

Inputs

MdslBindingHandle: The handle returned from MdslInitialize

MdslLinkHandle: The handle returned from NDIS₋₋ MAC₋₋ LINK₋₋ UPindication when line is connected.

WanPacket: A pointer to the NDIS₋₋ WAN₋₋ PACKET structure containing apointer to a contiguous buffer.

Outputs

Status: A status value specifying information about the error if thereturn value is not NDIS₋₋ STATUS₋₋ SUCCESS or NDIS₋₋ STATUS₋₋ PENDING

Return Values: MdslWanSend returns NDIS₋₋ STATUS₋₋ SUCCESS or thefollowing status values:

NDIS₋₋ STATUS₋₋ PENDING

NDIS₋₋ STATUS₋₋ FAILURE

Processing

MdslWanSend will do:

1. Check the packet size to make sure it is valid

2. Check if the line is currently connected

3. If medium is not currently busy, send the packet right away andreturn NDIS₋₋ STATUS₋₋ SUCCESS. If it is busy, put the packet in thetransmit list and return NDIS₋₋ STATUS₋₋ PENDING. After the this packethas been sent out, MDSL driver will call NdisWanSendComplete to indicatethe completion of the sending event.

FIG. 11l depicts the interaction between the NDIS library and the driverfor MdslWanSend.

System Integration

Under Windows NT or Windows 95, the various network software componentsare linked together, or bound into a logical hierarchy as depicted inFIG. 11m.

When network components are installed, information is written to theWindows NT Registry that describes the order in which the networkcomponents should be loaded, and how those network components are to bebound together. The Windows NT Control Panel Network Applet (NCPA)manages the network component installation and binding. The driverbinding works as depicted in FIG. 11n.

The External Interfaces for the system are as follows:

User Interfaces

MDSL driver does not expose to the end users directly. It is bound withthe protocol stack in the system through NDIS wrapper. Application willuse it though different standard protocol APIs such as window socket,NetBIOS, RPC, etc.

Hardware Interfaces

The hardware interfaces of MDSL driver is described in MDSL HostInterface Requirement Specification.

Software Interfaces

MDSL driver provide 13 Upper-Edge Functions and one driver main entrypoint to the Operating System. It will call functions defined inndis.lib and ndiswan.lib to implement a lot of tasks which areindependent of a specific Network Interface Card (NIC).

Communication Interfaces

Packets being received and sent are in any format provided by NDIS WANlibrary. It can be IP data gram or other frame with or without headercompression, Microsoft Point to Point compression, and encryption. Itcan also be a simple HDLC frame if the Simple HDLC Framing switch isturned on in NDIS WAN library. All these higher layer framing aretransparent to the MDSL driver.

Design Constraints

The design must be compliant with NDIS 3.0 WAN driver specification.

Attributes

Availability/Recovery

Errors during entry point processing will not result in catastrophicfailure of the driver. The error will be passed to the calling entityand NDIS will perform appropriate processing. Failures in initializingthe MDSL NIC or establishing a line connection will result in an errorbeing returned to the calling entity. Errors during receiving/sendingpackets are logged.

Software acquisition

The software to configure a multimode modem as to its DSL band operationcan be acquired by downloading into a Flash EPROM (see FIG. 5a of aboard version of a DSL modem enhanced to include Flash EPROM). Thisdownloading can be performed by using the voice-band configuration(V.34) already in the multimode modem. In particular, a host can usevoice-band modem operation to call a source telephone number which thencan download the software for DSL band operation over the voice-band tothe Flash EPROM. In the same manner, updates of the DSL band softwarecan be downloaded either over voice-band or over DSL band. FIG. 12illustrates such a downloading process.

Referring now to FIG. 13a, there may be seen the MDSL frequency divisionfor upstream and downstream. In voice-band modems, the highest frequencyof interest is only 3.3 KHz. In MDSL, the highest frequency of interestcan be hundreds of KHz. For example, for 1/4 T1 rates, the centerfrequency of the upstream channel F_(c1) is 100 KHz while the centerfrequency of the downstream channel F_(c2) is 300 KHz. The bandwidth ofeach channel is 200 KHz and the highest frequency of interest is F₂₊=400 KHz. The challenge is to be able to process the data with a lowcost programmable digital signal processor (DSP). This inventionaddresses how to reduce the processing requirements by making eitherpassband signal depicted in FIG. 13a appear identical to the DSP.

The MDSL modem has two modes, the central office (CO) and remote user(RU) modes. In the CO mode, the modem transmits in the upper frequencyband and receives in the lower frequency band. In the RU mode thereverse occurs. The modem transmits in the lower frequency band andreceives in the upper frequency band.

Using the normal interpretation of the Nyquist Sampling Theorem, aminimum sampling rate twice the highest frequency of interest isrequired to process the data. For the CO modem, the analog-to-digitalconverter (ADC) can sample the received signal at twice F₁₊. However, itmust generate samples for the digital-to-analog converter (DAC) at twiceF₂₊. For the RU modem, the DAC can run at twice F₁₊. However, the ADCmust run at twice F₂₊.

This invention makes use of digital sampling rate conversion to decreasethe sampling rate and consequently the processing requirements for theimplementation of the MDSL modem.

For the RU modem, the high sampling rate is connected with theanalog-to-digital conversion process. The 1/4 T1 example modem receiverfront end is shown in FIG. 13b at the RU modem. The incoming analogsignal, centered at 300 KHz is first bandpass filtered to maximize thesignal to noise ratio by isolating the bandwidth of interest. The signalis then sampled by the ADC at the normal Nyquist rate of twice f₂₊, 800KHz.

The sampled spectra in the digital domain is shown in FIG. 13c. Becausethere is no signal below F_(sampling) /4=200 KHz, the sampling rate canbe safely reduced to 400 KHz by decimating the samples by two.Decimation by two generates an inverted image centered at 100 KHz asshown in FIG. 13d.

The original image can be obtained by multiplying every other sample ofthe decimated data stream by (-1). Since every other output from the ADCis being discarded, there is no need to generate them, i.e. the ADC canrun at 400 KHz instead of 800 KHz.

For the CO modem, the high output sampling rate is required in thedigital-to-analog process. It would require a minimum a sampling rate of800 KHz to directly generate the output samples corresponding to theupper passband signal. It would be much better if the CO modem couldgenerate the output samples in the lower frequency band, and somehowautomatically translate the spectrum to the upper band. FIG. 13e showsthe spectrum of the low band signal in the digital domain.

Translation can be accomplished by making use of the aliased imagesproduced by digitally upsampling to a higher rate. Upsampling by two to800 KHz consists of inserting a zero valued sample between the computedoutput samples. This generates images at harmonics of the original 400KHz sampling frequency. When the new modified output data stream ispassed to a DAC, the analog output spectrum shown in FIG. 13f isgenerated. (The sinc roll-off characteristic imparted by the conversionprocess has been left out of the figure). By the use of an appropriateanalog bandpass filter, the inverted image centered at 300 KHz can beselected. Since the inserted values are zero, they need not be computedby the DSP. The inversion can be either corrected by multiplication ofodd samples by (-1) or disregarded completely, since the spectrum isinverted again by the decimation process at the RU modem. As show inFIG. 13g, the zero sample interleaving process can be implemented bysimple external logic outside the DSP.

In conclusion, the application of sampling rate conversion allows theDSP in the MDSL modem to assume that it is always transmitting andreceiving only in the lower frequency band. Its computations aretherefore based on a much lower sampling rate than would normally bedictated by the actual analog signal frequency content.

Discrete Multitone (DMT) has been chosen as the standard for AsymmetricDigital Subscriber Loops (ADSL) by the ANSI Standards Committee T1E1.4.Previous contributions to the T1E1 standards activity have made claimsthat 19-bit precision in the fast Fourier transforms FFT's is necessaryto achieve adequate dynamic range for ADSL-2 bitrates (6-7 Mbps). Theproblem is how to implement the FFTs in a fixed point 16-bit processorand provide adequate dynamic range for the ADSL-2 bitrates.

Normally when implementing fixed point FFTs, the data is blindly downscaled down at each stage to prevent the fixed point values fromoverflowing during the multiply and add operations. If the range of datavalues is such that no overflow could occur during the stage, downscaling results in the unnecessary loss of precision.

The approach for solving this problem in accordance with the teachingsof the present invention is preferably to implement both forward andinverse FFTs in 16-bit fixed point using a variable scaling scheme whichexamines the data before each FFT stage and scales down the data only ifan overflow is possible during the stage. This removes the unnecessaryloss of precision which would be caused by the `blind` down scaling whenan overflow would not occur. The need for scaling is determined bylooking at the number of sign bits in the FFT data before each stage.The data is scaled by right shifting. Tests were conducted by shiftingby 1 bit or 2 bits at a time. Although, in general, both shift amountsworked, in certain cases where the data values were a maximum value andwith specific sine/cosine values, the single shifted value could stilloverflow.

The total amount of scaling during the FFT is maintained so that the FFToutput data can be normalized (rescaled) at the completion of the FFT.Attached as an Appendix is the test version of C code used to test thesolution. The variable scaling method does require more processing powerthan the "blind" scaling, since all the data must be examined beforeeach stage of the FFT. Simulation results show that 19-bit fixed pointfixed scaling FFTs are only marginally better, in the expectedsignal-to-noise operating range, than the 16-bit variable scaled fixedpoint FFT.

The variable scaling of the fixed point FFT provides an advantage in anyapplication which the data range is such that an overflow would notoccur on every stage and additional processing power is available forimproved precision.

In the central office end, a modem pool can be used to handle multipleMDSL lines. Although a dedicated line coupling and front end circuit isnecessary for each MDSL line, the signal processing power of a highperformance DSP chip can be shared among multiple MDSL lines. Themultiple line capability of an MDSL modem pool can be further enhancedby incorporating multiple DSP chips within a single modem pool unit.

FIG. 14a shows that an MDSL modem pool can have N logical MDSL modems,each consisting of a transmitter part and a receiver part. Due to thelocation of the modem pool, transmitters can be synchronized to the samecentral office clock. Because of the MDSL line concentration and theshared modem pool architecture, data symbols of the transmit signal andsamples of the received signal are readily accessible among all logicalmodems. The transmit signal synchronization and the transmit andreceived signal accessibility enable the adaptation of NEXT cancellationtechnique. A multiple input-multiple output NEXT canceller can beimplemented in conjunction with an MDSL modem pool.

To avoid the NEXT and the cost of echo cancellation hardware, apreferred MDSL modem uses frequency division duplex for transmissionfrom a central office to a subscriber in the downstream direction andvice versa in the upstream direction. The downstream transmissionnormally occupies the higher frequency part of the MDSL spectrum. Thefrequency separation between the downstream and the upstream directionsis based on the use of high order bandpass filters. FIG. 14b shows thata guardband is used between the upstream frequency band and thedownstream frequency band spectrum. Furthermore, the bandwidth of eachdownstream spectrum can be different for different modems. This might benecessary because the spectral allocation could be optimized accordingto the individual line conditions and downstream to upstream throughputratio.

Because of the finite amount of attenuation in the bandpass filterstopband and the closeness between downstream and upstream spectra,there will always be some residue noise from the reverse channel. Due tothe heavy subscriber line attenuation, the relative strength of residualnoise might not be negligible compared with that of the received signal.Because of the possibility of upstream and downstream spectraoverlapping among different MDSL lines, the NEXT noise can occur withinthe region of guardband. Hence, the NEXT cancellation can be used tominimize the interference of reverse channel residual noise of the sameMDSL line and the interference of reverse channel NEXT noise fromadjacent MDSL lines.

FIG. 14c shows that a reverse channel NEXT canceller bank can beimplemented within the same MDSL modem pool unit with or withoutadditional DSP chips. The NEXT canceller bank needs the access to thetransmit signal and the digitized received signal of all modems. TheNEXT canceller bank has N NEXT cancellers as depicted in FIG. 14dcorresponding to N MDSL modems. Each canceller has N adaptive filters ofsize M. Outputs of all N adaptive filters are appropriately combined toform the NEXT cancellation signal for the corresponding modem. Eachadaptive filter is adapted according to the error signal between thereceived signal and the NEXT cancellation signal and the correspondingtransmit signal as the correlation vector as depicted in FIG. 14e.

The following Terminology/Defintions has been used herein.

MDSL--Mid-band Digital Subscriber Line.

MDSL-C--The MDSL running on the Central Office site

MDSL-R--The MDSL running on the residential site

POTS--Plain Old Telephone Service. It only makes and receives phonecalls.

NDIS--Network Device Interface Specification. A specification defined byMicrosoft to provide a standard interface for network drivers tointeract with each other and with Operating System.

NIC--Network Interface Card

WAN--Wide Area Networking

mini-port NIC driver--A network interface card driver developed as anextension to the NDIS 3.0 specification to allow developers to writeonly code that is specific to the hardware, merging the common concernsinto the NDIS library or wrapper.

                                      APPENDIX                                    __________________________________________________________________________    @INPUT.sub.-- DECLARATIONS:                                                   STATIC Double I.sub.-- clock;                                                 STATIC Ovector I.sub.-- real.sub.-- in;                                       STATIC Double I.sub.-- reset;                                                 STATIC Double I.sub.-- valid.sub.-- in;                                       @OUTPUT.sub.-- DECLARATIONS:                                                  STATIC Ovector O.sub.-- img.sub.-- out;                                       STATIC Ovector O.sub.-- real.sub.-- out                                       STATIC Double O.sub.-- scaler;                                                STATIC Double O.sub.-- valid.sub.-- out;                                      @PARAMETER.sub.-- DECLARATIONS:                                               STATIC Long P.sub.-- fft.sub.-- math;                                         }                                                                             @STATE.sub.-- DECLARATIONS:                                                   {                                                                             STATIC Long size ;                                                            STATIC Double *f.sub.-- real ;                                                STATIC Double *f.sub.-- img ;                                                 STATIC short *i.sub.-- real ;                                                 STATIC short *i.sub.-- img ;                                                  STATIC long *l.sub.-- real ;                                                  STATIC long *l.sub.-- img ;                                                   STATIC Double *in.sub.-- r ;                                                  STATIC Double *out.sub.-- i ;                                                 STATIC Double *out.sub.-- r ;                                                 STATIC long flag ;                                                            STATIC long clock ;                                                           STATIC long ltemp ;                                                           STATIC long lmax ;                                                            STATIC int scale ;                                                            STATIC int i ;                                                                STATIC int j ;                                                                STATIC int l ;                                                                STATIC int max.sub.-- bttr ;                                                  STATIC int j2 ;                                                               STATIC int j11 ;                                                              STATIC short temp ;                                                           STATIC int k ;                                                                STATIC double twopi ;                                                         STATIC double tmp.sub.-- real ;                                               STATIC double tmp.sub.-- img ;                                                STATIC int doit ;                                                             STATIC int Sine[256] ;                                                        STATIC int Cosine[256] ;                                                      STATIC FILE * file1 ;                                                         STATIC int lmm ;                                                              STATIC int lix ;                                                              STATIC double scl;                                                            STATIC int bttr;                                                              STATIC int li ;                                                               STATIC int power ;                                                            STATIC int stage ;                                                            STATIC double t1 ;                                                            STATIC double t2 ;                                                            STATIC double arg ;                                                           STATIC double c ;                                                             STATIC double s ;                                                             STATIC int it1 ;                                                              STATIC int it2 ;                                                              STATIC int ic ;                                                               STATIC int is ;                                                               STATIC int arginc ;                                                           STATIC int iarg ;                                                             STATIC short tmp.sub.-- r ;                                                   STATIC short tmp.sub.-- i ;                                                   STATIC int itmp1re ;                                                          STATIC int itmp1im ;                                                          STATIC int itmp2re ;                                                          STATIC int itmp2im ;                                                          STATIC double pi ;                                                            STATIC double c1 ;                                                            STATIC double c2 ;                                                            STATIC double wpr ;                                                           STATIC double wpi ;                                                           STATIC double wi ;                                                            STATIC double wr ;                                                            STATIC double wtmp ;                                                          STATIC double tmp1re ;                                                        STATIC double tmp1im ;                                                        STATIC double tmp2re ;                                                        STATIC double tmp2im ;                                                        STATIC int length ;                                                           STATIC int half ;                                                             STATIC int halfpow ;                                                          STATIC int DEBUG ;                                                            STATIC long lt1 ;                                                             STATIC long lt2 ;                                                             STATIC long ls ;                                                              STATIC long lc ;                                                              STATIC long ltemp1 ;                                                          STATIC long ltemp2 ;                                                          STATIC long ltemp3 ;                                                          STATIC long ltemp4 ;                                                          STATIC long ltmp.sub.-- r ;                                                   STATIC long ltmp.sub.-- i ;                                                   STATIC long ltmp1re ;                                                         STATIC long ltmp1im ;                                                         STATIC long ltmp2re ;                                                         STATIC long ltmp2im ;                                                         STATIC double ftemp ;                                                         }                                                                             @BLOCK.sub.-- DECLARATIONS:                                                   {                                                                             }                                                                             @INITIALIZATION.sub.-- CODE:                                                  {                                                                             DEBUG = 0 ;                                                                    size = 512 ;                                                                 power = 9 ;                                                                   if(P.sub.-- fft.sub.-- math == 1)                                              {                                                                            f.sub.-- real = (double *) malloc (size * sizeof(double)) ;                   f.sub.-- img = (double *) malloc (size * sizeof(double)) ;                     }                                                                             else                                                                          {                                                                            i.sub.-- real = (short *) malloc (size * sizeof(short)) ;                     i.sub.-- mg = (short *) malloc (size * sizeof(short)) ;                       l.sub.-- real = (long *) malloc (size * sizeof(long)) ;                       l.sub.-- img = (long *) malloc (size * sizeof(long)) ;                         }                                                                             twopi= 3.1415926536 * 2.0 ;                                                   pi = 3.1415926536 ;                                                           file1 = fopen("/home/mannerin/sincos1.txt","r") ;                             for(j=0 ;j < 256 ;j++)                                                       {                                                                             fscanf(file1, "%08x \n",&Cosine[j]) ;                               }                                                                              for(j=0 ;j < 256  ;j++)                                                      {                                                                             fscanf(file1, "%08x \n",&Sine [j]) ;                                }                                                                              fclose(file1) ;                                                              }                                                                             @RUN.sub.-- OUT.sub.-- CODE:                                                  {     /* start of run code */                                                 flag = 0 ;                                                                    O.sub.-- valid.sub.-- out = 1.0 ;                                             O.sub.-- scaler = 0.0 ;                                                       @IF (I.sub.-- clock == CONNECTED)                                             clock = (long) I.sub.-- clock ;                                               flag | = (˜clock & 1) ;                                        @ENDIF                                                                        @IF (I.sub.-- clock == CONNECTED)                                             flag | = (long) I.sub.-- valid.sub.-- in ;                           @ENDIF                                                                        @IF (I.sub.-- reset == CONNECTED)                                             if(I.sub.-- reset == 1.0)                                                     {                                                                             }                                                                             @ENDIF                                                                        if(!flag)                                                                      { /* start of process input/output */                                         /* read in input */ ;                                                         in.sub.-- r = (double *) OvGetStart(I.sub.-- real.sub.-- in) ;                out.sub.-- i = (double *) OvGetStart(O.sub.-- img.sub.-- out) ;               out.sub.-- r = (double *) OvGetStart(O.sub.-- real.sub.-- out) ;              size = 512 ;                                                                  power = 9 ;                                                                   if(P.sub.-- fft.sub.-- math == 1)                                             {  /* start of if floating */                                                /*                                                                             for(i=0; i < size ; i++)                                                     { f.sub.-- real[i] =in.sub.-- r[i] ;                                          }                                                                             /*                                                                            /**********************************************************/                  length = 512;                                                                 half = 256;                                                                   halfpow = power - 1;                                                          c1 = c2 = 0.5;                                                                for (i = 0,j = 0; i < half; i++,j += 2)                                       {                                                                             f.sub.-- real[i] = in.sub.-- r[j] ;                                           f.sub.-- img[i] = in.sub.-- r[j + 1] ;                                        }                                                                             c2 = -c2;                                                                      /* start of do floating fft */                                               /***********************************************************/                  size = 256 ;                                                                  power = 8 ;                                                                   max.sub.-- bttr = size ;                                                      for (stage = 1; stage <= power; stage++) {                                   lix = max.sub.-- bttr;                                                        max.sub.-- bttr /= 2;                                                         lmm = max.sub.-- bttr;                                                        scl = ((double) (- twopi) / (double) lix);                                    for(bttr = 1; bttr <= lmm; bttr++) {                                          arg = (bttr - 1) * scl;                                                       c = cos (arg);                                                                s = sin (arg);                                                                for(li = lix; li <= size ; li += lix) {                                       j11 = li - lix + bttr - 1;                                                    j2 = j11 + max.sub.-- bttr;                                                   t1 = f.sub.-- real[j11] - f.sub.-- real[j2] ;                                 t2 = f.sub.-- img[j11] - f.sub.-- img[j2] ;                                   f.sub.-- real[j11] = f.sub.-- real[j11] + f.sub.-- real[j2] ;                 f.sub.-- img[j11] = f.sub.-- img[j11] + f.sub.-- img[j2] ;                    f.sub.-- real[j2] = (c*t1 + s*t2);                                            f.sub.-- img[j2] =  (c*t2 - s*t1);                                            }                                                                             }                                                                             }                                                                             j = 0 ;                                                                       for(i = 0; i < (size - 1);i++) {                                              if(i < j) {                                                                   tmp.sub.-- real = f.sub.-- real[j] ;                                          tmp.sub.-- img = f.sub.-- img[j] ;                                            f.sub.-- real[j] = f.sub.-- real[i] ;                                         f.sub.-- img[j] = f.sub.-- img[i] ;                                           f.sub.-- real[i] = tmp.sub.-- real;                                           f.sub.-- img[i] = tmp.sub.-- img;                                              }                                                                             k = (size / 2);                                                               while (k < (j + 1)) { j -= k; k /= 2; }                                       j += k;                                                                       }                                                                            /************************************************************************/    /**********************************************************/                  /* Perform even/odd separation algorithm.                                                                */                                                 /* Form an array with N/2 + 1 elements.                                                                  */                                                 /**********************************************************/                  arg = pi / half;                                                              wtmp = sin (0.5 * arg);                                                       wpr = -2.0 * wtmp * wtmp;                                                     wpi = sin (arg);                                                              wr = 1.0 + wpr;                                                               wi = wpi;                                                                     for (i = 1,j = (half - 1); i <= j; i++, j--)                                  {                                                                             tmp1re = (f.sub.-- real[i] + f.sub.-- real[j]) * c1;                          tmp1im = (f.sub.-- img[i] - f.sub.-- img[j]) * c1;                            tmp2re = (f.sub.-- img[i] + f.sub.-- img[j]) * -c2;                           tmp2im = (f.sub.-- real[i] - f.sub.-- real[j]) * c2;                          f.sub.-- real[i] = (tmp1re + wr * tmp2re - wi * tmp2im);                      f.sub.-- img[i] = (tmp1im + wr * tmp2im + wi * tmp2re);                       f.sub.-- real[j] = (tmp1re - wr * tmp2re + wi * tmp2im);                      f.sub.-- img[j] = (- tmp1im + wr * tmp2im + wi * tmp2re);                     wtmp = wr;                                                                    wr += (wr * wpr - wi * wpi);                                                  wi += (wi * wpr + wtmp * wpi);                                                }                                                                             /**********************************************************/                  /* Compute the first pair of frequency cells,                                                            */                                                 /* at the dc and the Nyquist point                                                                       */                                                 /**********************************************************/                  wr = f.sub.-- real[0] ;                                                       f.sub.-- real[0] = wr + f.sub.-- img[0] ;                                     f.sub.-- img[0] = f.sub.-- img[0] - wr;                                       /************************************************************************/    for(i=0 ; i < size ; i++)                                                      {                                                                            out.sub.-- r[i] = f.sub.-- real[i] ;                                          out.sub.-- i[i] = -f.sub.-- img[i] ;                                          }                                                                             } /* end of if floating */                                                    /***********************************************************************/     else                                                                           if(P.sub.-- fft.sub.-- math == 2 )                                            {                                                                            /* start of int fft */                                                        length = 512 ;                                                                half = 256 ;                                                                  halfpow = power - 1;                                                          for (i = 0,j = 0;i < half; i++, j += 2)                                       {                                                                             l.sub.-- real[i] = (long) (in.sub.-- r[j] * 65536.0) ;                        l.sub.-- img[i] = (long) (in.sub.-- r[j + 1] * 65536.0 );                     }                                                                             lmax = 0 ;                                                                    for (i = 0 ; i < half; i ++ )                                                 {                                                                             ltemp = l.sub.-- real[i] ;                                                    if(ltemp < 0) ltemp =- ltemp ;                                                if (ltemp > lmax) lmax = ltemp ;                                              ltemp = l.sub.-- img[i] ;                                                     if(ltemp < 0) ltemp =- ltemp ;                                                if (ltemp > lmax) lmax = ltemp ;                                              }                                                                             scale = 0 ;                                                                   for(i=0;i < 32 ; i++)                                                         {                                                                             lmax <<= 1 ;                                                                  if (lmax < 0)                                                                        break ;                                                                else                                                                           scale++ ;                                                                    }                                                                             scale-- ;                                                                     scl = 1.0 ;                                                                   for(i=0 ; i < scale ; i++)                                                    scl *= 2.0 ;                                                                  lmax = 65536/(long)scl ;                                                       for (i = 0 ; i < half; i++ )                                                  {                                                                            i.sub.-- real[i] = (short) (l.sub.-- real[i]/lmax) ;                          i.sub.-- img[i] = (short) (l.sub.-- img[i]/lmax) ;                             }                                                                            /* do fft */                                                                  size = 256 ;                                                                  power = 8 ;                                                                   arginc = 2 ;                                                                  max.sub.-- bttr = size ;                                                      scale = 0 ;                                                                   for (stage = 1; stage <= power; stage++) {                                    doit = 0 ;                                                                     for(j=0 ; j < size ; j++)                                                     { temp = (i.sub.-- real[j] & (short) 0xc000) ;                               if((temp != 0) && (temp != (short) 0xc000))                                   { doit= 1 ;break; }                                                           temp = (i.sub.-- img[j] & (short)0xc000 ) ;                                   if((temp != 0) && (temp != (short)0xc000))                                    { doit = 1 ;break; }                                                          }                                                                             if(doit)                                                                       {                                                                             scale++ ;                                                                     for(i=0 ; j < size ; j++)                                                    { i.sub.-- real[j] /= 2 ;                                                     i.sub.-- img[j] /= 2 ;                                                        }                                                                              }                                                                             for(j=0 ; j < size ; j++)                                                    { temp = (i.sub.-- real[j] & (short) 0xe000) ;                                if((temp != 0) && (temp != (short) 0xe000))                                   { doit = 1 ;break; }                                                          temp = (i.sub.-- img[j] & (short)0xe000 );                                    if((temp != 0) && (temp !=(short)0xe000))                                     { doit = 1 ;break; }                                                          }                                                                             if(doit)                                                                       {                                                                             scale++ ;                                                                     for(j=0 ; j < size ; j++)                                                    { i.sub.-- real[j] /= 2 ;                                                     i.sub.-- img[j] /= 2 ;                                                        }                                                                              }                                                                             iarg = 0 ;                                                                    lix = max.sub.-- bttr;                                                        max.sub.-- bttr /= 2;                                                         lmm = max.sub.-- bttr;                                                        for(bttr = 1; bttr <= lmm; bttr++) {                                         ic = (int) Cosine[iarg] ;                                                     is = (int) - Sine[iarg];                                                      iarg += arginc ;                                                              for(li = lix; li <= size; li += lix) {                                        j11 = li - lix + bttr - 1;                                                    j2 = j11 + max.sub.-- bttr;                                                   it1 = i.sub.-- real[j11] - i.sub.-- real[j2] ;                                it2 = i.sub.-- img[j11] - i.sub.-- img[j2] ;                                  i.sub.-- real[j11] = i.sub.-- real[j11] + i.sub.-- real[j2] ;                 i.sub.-- img[j11] = i.sub.-- img[j11] + i.sub.-- img[j2] ;                    i.sub.-- real[j2] = (short) (((ic*it1) + (is*it2)) / 32768 ) ;                i.sub.-- img[j2] = (short) (((ic*it2) - (is*it1)) / 32768 ) ;                 }                                                                              }                                                                             arginc *= 2 ;                                                                }                                                                             j = 0 ;                                                                       for(i = 0; i < (size - 1); i++) {                                              if(i < j) {                                                                  tmp.sub.-- r = i.sub.-- real[j] ;                                             tmp.sub.-- i = i.sub.-- img[j] ;                                              i.sub.-- real[j] = i.sub.-- real[i] ;                                         i.sub.-- img[j] = i.sub.-- img[i] ;                                           i.sub.-- real[i] = tmp.sub.-- r ;                                             i.sub.-- img[i] = tmp.sub.-- i ;                                              }                                                                             k = (size / 2);                                                               while (k < (j + 1)) { j -= k; k /= 2; }                                       j += k;                                                                        }                                                                            /************************************************************************/    /**********************************************************/                  /* Perform even/odd separation algorithm.                                                                */                                                 /* Form an array with N/2 + 1 elements.                                                                  */                                                 /**********************************************************/                  k = 1 ;                                                                       for (i = 1, j = (half - 1); i <= j; i++, j--)                                 {                                                                             /*    wr => Costable[1 . . . ] wi => Sintable[1 . . . ] */                    is = Sine[k] ;                                                                ic = Cosine[k] ;                                                              itmp1re = (int)((i.sub.-- real[i] + i.sub.-- real[j]) >> 1 ) ;                itmp1im = (int)((i.sub.-- img[i] - i.sub.-- img[j]) >> 1 ) ;                  itmp2re = (int)((i.sub.-- img[i] + i.sub.-- img[j]) >> 1 ) ;                  itmp2im = (int) (-((i.sub.-- real[i] - i.sub.' real[j]) >> 1)) ;              i.sub.-- real[i] = (short) (itmp1re + ((ic * itmp2re - is * itmp2im) /        32768));                                                                      i.sub.-- img[i] = (short) (itmp1im + ((ic * itmp2im + is *itmp2re) /          32768 ));                                                                     i.sub.-- real[j] = (short) (itmp1re - (( ic * itmp2re - is * itmp2im)/        32768));                                                                      i.sub.-- img[j] = (short) (-itmp1im + ((ic * itmp2im + is * itmp2re)/         32768));                                                                      k++ ;                                                                         }                                                                             /**********************************************************/                  /* Compute the first pair of frequency cells,                                                            */                                                 /* at the dc and the Nyquist point                                                                       */                                                 /**********************************************************/                  is = i.sub.-- real[0] ;                                                       i.sub.-- real[0] = is + i.sub.-- img[0] ;                                     i.sub.-- img[0] = i.sub.-- img[0] - is ;                                      /************************************************************************/     scl = 1.0 ;                                                                  for(i=0 ; i < scale ; i++)                                                    scl *= 2.0 ;                                                                  for(i=0 ; i < size ; i++)                                                     {                                                                             /*                                                                            out.sub.-- r[i] = (double) (i.sub.-- real[i] << scale) ;                      out.sub.-- i[i] = (double) (-i.sub.-- img[i] << scale) ;                      */                                                                            out.sub.-- r[i] = (double) (i.sub.-- real[i] ) ;                              out.sub.-- i[i] = double) (-i.sub.-- img[i] ) ;                               out.sub.-- r[i] *= ((scl * (float)lmax)/65536.0) ;                            out.sub.-- i[i] *= ((scl * (float)lmax)/65536.0) ;                            /*                                                                            out.sub.-- r[i] *= scl/(float)lmax ;                                          out.sub.-- i[i] *= scl/(float)lmax ; */                                       }                                                                              } /* end of int fft */                                                        O.sub.-- valid.sub.-- out = 0.0 ;                                             O.sub.-- scaler = (double) scale ;                                           } /* end !flag */                                                             } /* end of run code */                                                       @TERMINATION.sub.-- CODE:                                                     {                                                                              if(P.sub.-- fft.sub.-- math == 1)                                             {                                                                            free(f.sub.-- real) ;                                                         free(f.sub.-- img) ;                                                           }                                                                             else                                                                          {                                                                            free(i.sub.-- real) ;                                                         free(i.sub.-- img) ;                                                          free(l.sub.-- real) ;                                                         free(l.sub.-- img) ;                                                           }                                                                            }                                                                             __________________________________________________________________________

What is claimed is:
 1. Apparatus for reducing reverse channel near-endcrosstalk (NEXT) noise in an xDSL modem pool having N xDSL modems, eachmodem including a transmitter connected for transmitting a transmitsignal to and a receiver connected for receiving a received signal froma respective one of N corresponding twisted pair subscriber loops; theapparatus comprising:a reverse channel NEXT canceller bank connected foraccess to data symbols of the transmit signal and digitized samples ofthe received signal of all N modems; the NEXT canceller bank having NNEXT cancellers respectively corresponding to the N xDSL modems; eachcanceller comprising N adaptive filters, with outputs of all N adaptivefilters being combined to form a NEXT cancellation signal for thecorresponding modem; and each adaptive filter being adapted according toan error signal between the received signal and the NEXT cancellationsignal and the corresponding transmit signal as a correlation vector. 2.Apparatus as in claim 1, wherein the modems are logical modemsestablished by sharing signal processing power of a DSP chip amongmultiple xDSL loops.
 3. Apparatus as in claim 1, further comprisingcontrol circuitry connected for synchronizing clocking of the modemtransmit signals.
 4. Apparatus for reducing reverse channel near-endcrosstalk (NEXT) noise in a modem pool having first and second modems,each modem including a transmitter connected for transmitting a transmitsignal and a receiver connected for receiving a received signal; theapparatus comprising:a NEXT canceller for the first modem connected foraccess to the transmit signals of both the first and second modems andfor access to the received signal of the first modem; the first modemNEXT canceller comprising first and second adaptive filters, withoutputs of the adaptive filters being combined to form a NEXTcancellation signal for the first modem; the first adaptive filter beingadapted according to an error signal between the first modem receivedsignal and the first modem NEXT cancellation signal and the first modemtransmit signal as a correlation vector; and the second adaptive filterbeing adapted according to an error signal between the first modemreceived signal and the first modem NEXT cancellation signal and thesecond modem transmit signal as a correlation vector.
 5. Apparatus as inclaim 4, wherein the first and second modems are logical modemsestablished by sharing signal processing power of a DSP chip. 6.Apparatus as in claim 4, further comprising control circuitry connectedfor synchronizing clocking of the first and second modem transmitsignals.
 7. Apparatus as in claim 4, further comprising a NEXT cancellerfor the second modem connected for access to the transmit signals ofboth the first and second modems and for access to the received signalof the second modem; the second modem NEXT canceller comprising firstand second adaptive filters, with outputs of the adaptive filters of thesecond modem NEXT canceller being combined to form a NEXT cancellationsignal for the second modem; the first adaptive filter of the secondmodem NEXT canceller being adapted according to an error signal betweenthe second modem received signal and the second modem NEXT cancellationsignal and the first modem transmit signal as a correlation vector; andthe second adaptive filter of the second modem NEXT canceller beingadapted according to an error signal between the second modem receivedsignal and the second modem NEXT cancellation signal and the secondmodem transmit signal as a correlation vector.
 8. Apparatus for reducingreverse channel near-end crosstalk (NEXT) noise in a central office xDSLmodem pool having first and second xDSL modems, each modem including atransmitter connected for transmitting a transmit signal to and areceiver connected for receiving a received signal from a respective oneof a corresponding twisted pair subscriber loop; and a central officeclock connected for synchronizing the first and second modemtransmitters; the apparatus comprising:a NEXT canceller for the firstmodem connected for access to the transmit signals of both the first andsecond modems and for access to the received signal of the first modem;the first modem NEXT canceller comprising first and second adaptivefilters, with outputs of the adaptive filters of the first modem NEXTcanceller being combined to form a NEXT cancellation signal for thefirst modem; the first adaptive filter of the first modem NEXT cancellerbeing adapted according to an error signal between the first modemreceived signal and the first modem NEXT cancellation signal and thefirst modem transmit signal as a correlation vector; and the secondadaptive filter of the first modem NEXT canceller being adaptedaccording to an error signal between the first modem received signal andthe first modem NEXT cancellation signal and the second modem transmitsignal as a correlation vector; and a NEXT canceller for the secondmodem connected for access to the transmit signals of both the first andsecond modems and for access to the received signal of the second modem;the second modem NEXT canceller comprising first and second adaptivefilters, with outputs of the adaptive filters of the second modem NEXTcanceller being combined to form a NEXT cancellation signal for thesecond modem; the first adaptive filter of the second modem NEXTcanceller being adapted according to an error signal between the secondmodem received signal and the second modem NEXT cancellation signal andthe first modem transmit signal as a correlation vector; and the secondadaptive filter of the second modem NEXT canceller being adaptedaccording to an error signal between the second modem received signaland the second modem NEXT cancellation signal and the second modemtransmit signal as a correlation vector.
 9. Apparatus as in claim 8,wherein the first and second modems are logical modems established bysharing signal processing power of a DSP chip.